RT_Thread入门日记——启动流程(系统初始化)

RT_Thread 启动流程(系统初始化)

RT_Thread 操纵系统的启动和很大部分启动很类似。系统启动后,会进入汇编代码开始运行,然后跳转到C代码,进行RT_Thread 系统功能初始化,最后进入用户程序入口,即main() 。

系统初始化

系统初始化是在进入 main() 之前。一般情况下,可以先调用 $ Sub $$ main 作为在 main() 的补充的功能函数,在调用 $ Sub $ $main 转到 main() 函数执行,这样可以不用去管 main() 之前的系统初始化操作。

下面介绍在 components . c 中定义的这段代码
/* $ Sub$$main 函数 */
int $Sub $ $main (void){
rtthread_startup();
return 0;
}

RT_Thread程序内存分布

在 keil 工程编译完成之后,会有相应的程序所占用的空间提示信息;
(1) code : 代码段,存放程序的代码部分。
(2)RO_data: 只读数据段,存放程序中定义的常量;
(3)RW_data: 读写数据段,存放初始化为非0值的全局变量;
(4)ZI_data:0数据段,存放未初始化的全局变量及初始化为0的变量;
编译完工程后生成一个 .map 文件,会说明各个函数占用的尺寸和地址。

RT_Thread 内核对象模型

对象分为静态和动态对象,而且采用内核对象管理系统来访问,管理所有对象内核对象。
RT_Thread 内核对象包括线程,信号量,互斥量,事件,邮箱,消息队列,定时器,内存池,设备驱动,模块,未知,静态对象等。

对象模块初始化结构如下:

struct rt_object
{
char name [ RT_NAME_MAX ] /* 内核对象的名称 /
rt_uint8_t type /
内核对象的类型*/
rt_uint8_t flag /* 内核对象的参数*/
rt_uint8_t list /* 内核对象管理链表*/
}

内核对象管理方式

内核对象容器的数据结构如下:

struct rt_object_information
{
enum rt_object_class_type type /* 对象类型 /
rt_list_t object_list /
对象类型 /
rt_size_t object_size /
对象类型 */
}

管理方式包括:
  1. 初始化对象: (object , type , name)
  2. 脱离对象: 接口:void rt_object_detach ( rt_object_t object )
  3. 分配对象:接口: rt_object_allocate (enum rt_object_class_type type
    const char* name)
  4. 删除对象: 接口:void rt_object_delete (rt_object_t object )
  5. 辨识对象: 接口:rt_errt_t rt_object_is_systemobject(rt_object_t object );

待续…

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值