HAL包中定义了各个平台启动信息,在某个processor family中选择一个,找到一个具体的variant,找到其ld文件(连接描述文件,eCos中使用binutils包中的连接工具)。ld文件中定义了首先连接哪个文件,并以哪个函数为入口。一般启动的汇编文件为vector.S,入口函数为_start,(AT使用reset_vector为入口)。

从vector.S的入口执行,到这段代码的最后会跳转到cyg_start函数,这便开始正式进入C语言编写的代码。

eCos中用户程序的入口函数有两个cyg_user_start()和main()。

eCos在infra包中startup.cxx定义了weak的cyg_user_start()函数,如果用户定义了cyg_user_start()会代替这个默认的函数进行执行。但是要注意的是cyg_user_start在eCos中的cyg_start()中被调用之后,才会调用Cyg_Scheduler::start(),这就是说如果要使用调度,那就不能让cyg_user_start处于一个死循环中。

第二个可以使用的入口函数名为main()函数,注意的是这个需要增加libc才能够使用。

既然cyg_start()调用了cyg_user_start(),那么当然的想法就是在libc中应当存在一个cyg_user_start(),并且这个cyg_user_start()中调用了main()函数,这样就可以使用main()函数作为入口了。从CStartUp.cxx中发现,实际这只是两种main函数启动的方法之一,在eCos中选CYGSEM_LIBC_STARTUP_MAIN_INITCONTEXT就是使用这种方法的main()函数,使用的时候需要和cyg_user_start一样的使用注意,不能死循环。

第二种是CYGSEM_LIBC_STARTUP_MAIN_THREAD定义的方法,建立一个main函数的线程。mainthread.cxx中定义全局Cyg_Thread cyg_libc_main_thread,建立了一个线程对象,而CStartUp.cxx中定义了函数cyg_iso_c_start()内部实现内容为让cyg_libc_main_thread运行,该函数作为cyg_libc_startup_dummy_constructor_class的构造函数的实现。接着定义了静态的cyg_libc_startup_dummy_constructor_class类对象,这个对象构造的时候会使cyg_libc_main_thread开始运行。在这当中,需要注意对cyg_libc_main_thread和cyg_libc_startup_dummy_constructor_class类对象的构造时机进行控制。

实际上cyg_start()也可以作为入口函数,因为该函数也是weak的,不过需要增加一些必需的函数比如调度器的打开等。AT就是使用cyg_start()作为入口。

mysql ecos_eCos调用用户程序方法(转)相关推荐

  1. ecmall mysql版本_ECMall的MySQL数据调用的简单方法

    很多ecmall开发者会问,怎么使用Ecmall的mysql类库进行数据调用.从原理上来讲Ecmall的数据调用是以数据模块+模块类库的方式进行mysql数据调用的,所有数据模块都存储在include ...

  2. c efcore.mysql_EF Core在mysql中调用存储过程

    EF Core在mysql中调用存储过程,博主找了很多,然而大多都是EF Core+SqlServer的或者EF Core+Oracle的,并没有正对Mysql的Pomelo驱动的,所以查找了一些资料 ...

  3. linux php mysql.so_在linux下php挂接mysql.so扩展的方法

    总结的方向:在linux下php挂接mysql.so扩展的方法 问题背景:平常我们都是先安装mysql,然后才能去安装php.假如先安装php,后安装mysql,由于php需要连接mysql,因而在p ...

  4. jsp mysql中文乱码,jsp中文乱码 jsp mysql 乱码的解决方法

    jsp中文乱码 jsp mysql 乱码的解决方法 jsp中文乱码 jsp mysql 乱码要servlet里面支持中文的方法: 在dopost或者doget的第一句加上: request.setCh ...

  5. mysql select time,MySql查询时间段的方法

    本文实例讲述了MySql查询时间段的方法.分享给大家供大家参考.具体方法如下: MySql查询时间段的方法未必人人都会,下面为您介绍两种MySql查询时间段的方法,供大家参考. MySql的时间字段有 ...

  6. 在linux下php挂接mysql.so扩展的方法

    总结的方向:在linux下php挂接mysql.so扩展的方法 问题背景:平常我们都是先安装mysql,然后才能去安装php.假如先安装php,后安装mysql,由于php需要连接mysql,因而在p ...

  7. mysql 表资源,MySQL 复制表的方法

    1.mysqldump 执行过程: 一.将数据导出为 sql 文件. mysqldump -h$host -P$port -u$user --add-locks=0 --no-create-info ...

  8. phpfpm怎么连接mysql_配置nginx、mysql、php-fpm的方法

    mac下使用homebrew安装安装.配置nginx.mysql.php-fpm的方法. 一.前话: 1.1.环境选择: 重新在mac上配置php,原本mac上就自带有apach.php以及pgsql ...

  9. ecmall 连接mysql服务器失败_ecmall ECMall的MySQL数据库调用

    很多ecmall开发者会问,怎么使用Ecmall的mysql类库进行数据调用.从原理上来讲Ecmall的数据调用是以数据模块+模块类库的方式进行mysql数据调用的,所有数据模块都存储在\includ ...

最新文章

  1. 厦大计算机研究生和福大,考研:只知道厦门大学?福建还有这些211值得你了解...
  2. poj 3261 后缀数组 找反复出现k次的子串(子串能够重叠)
  3. CSS中的Position属性
  4. Android 2D Graphic Architecture
  5. Linux20180528 apache结合php 虚拟主机
  6. 服务器遭受***后的处理过程
  7. Linux安装GIMP
  8. java软件工程师是做什么的_JAVA软件工程师是做什么的?
  9. 基频和倍频的概念_基频峰,泛频峰,倍频峰,二倍频峰的区别
  10. Linux运维遇到的基本问题解决大全
  11. 全差分运放阻抗匹配计算(四)
  12. 北京社保卡和医疗存折(萌新看)
  13. 小程序+云开发---基础篇
  14. android wifi 共享网络,安卓手机怎么共享XP的网络 无线wifi共享教程【详解】
  15. mysql client 使用_mysqlclient怎么使用
  16. Vivo Y913拆解
  17. gps定位信息mysql_GPS定位数据库表设计
  18. 我的世界神奇宝贝服务器修改神兽刷新率,我的世界神奇宝贝1period;12怎么调神兽刷新率 | 手游网游页游攻略大全...
  19. 华为云06FusionAccess
  20. 【第十三届全国大学生数学竞赛非数学类】真就参加就有奖

热门文章

  1. 河南2017计算机职称考试,河南省2017年上半年全国计算机等级考试圆满结束
  2. 方案分享--直驱式风力发电实验仿真平台
  3. Vue3(尚硅谷天禹老师)
  4. ak47怎么得 rust_《CF手游》AK47孟德怎么样 扭蛋机保底自选卡分析
  5. Kubernetes使用Prometheus全方位监控(李作强)
  6. 2021年安全员-C证(陕西省)最新解析及安全员-C证(陕西省)找解析
  7. 页面置换算法知识回顾和习题
  8. 利用python制作加固肋计算软件
  9. 安装numpy, pandas, scipy 和matplotlib
  10. .net专家的精彩Blog