1.rtthread_startup() 首先在$Sub$$main(void)中运行rtthread_startup()函数, int $Sub$$main(void) { rtthread_startup(); return 0; } rtthread_startup()函数如下,主要是各种初始化,我们具体分析。 int rtthread_startup(void) { rt_hw_interrupt_disable(); /* board level initialization * NOT...
先看看 rtthread_startup: 开始分析之前先做几个说明,RT-Thread 中用的最多的是双向循环链表,而且是插入式链表,这样的链表只起链接作用,本身不携带数据,因此可以插入到各种自定义的结构体中,这些不同的结构体也能灵活的连接起来。这也是个人最喜欢的地方,对比 ucos 一个结构体一个链表的臃肿设计,RT-Thread 这个...
线程通过调用系统函数rt_thread_create/ rt_thread_init 进入初始状态; 通过调用系统函数 rt_thread_startup 变为就绪状态; 当这个线程调用 rt_thread delay 、rt_semtake、rt_mbrecv 等 系统函数时,将主动挂起或由于获取不到资源进入到挂起状态; 挂起状态的线程,如果它等待超时依然未获得资源或由于其他线程释放了...
系统先从启动文件开始运行,然后进入 RT-Thread 的启动入口rtthread_startup(),最后进入用户入口main()。 以MDK-ARM 为例,RT-Thread 启动流程,如下图所示: 系统启动后,先从汇编代码startup_xx.s开始运行,然后跳转到 C 代码,进行 RT-Thread 系统启动,最后进入用户程序入口main()。 1. 扩展main() RT-Thread ...
rt_thread_startup() 函数使得初始化状态的线程进入到就绪状态。 rt_thread_delay(),rt_sem_take(), rt_mutex_take() 等函数使得运行状态的线程进入到挂起状态。 rt_thread_resume(), rt_sem_release() 等函数使得挂起状态的线程返回到就绪状态。
RT-Thread中使用线程这个概念,而不是任务。两者相似,我在这里把他的线程当作任务来理解了 1、任务处理: 动态任务相关API 创建任务:rt_thread_create函数,创建任务之后会返回rt_thread_t类型的任务ID 创建之后启动任务:rt_thread_startup 删除任务:rt_thread_delete ...
系统先从启动文件开始运行,然后进入 RT-Thread 的启动 rtthread_startup() ,最后进入用户入口 main()...
extern int $Super$$main(void);/* re-define main function */int $Sub$$main(void){rtthread_startup();return 0;} $Sub$$main函数调用了rtthread_startup()函数,rtthread_startup()完成 RT-Thread 的启动。 int rtthread_startup(void){/* 关闭全局中断 */rt_hw_interrupt_disable();/* 硬件配...
从启动文件 startup_xx.S开始,进入到rtthread的入口函数rtthread_startup,在该入口函数之中完成RT-thread的系统初始化,初始化系统相关的硬件,以及内核对象,创建main线程,初始化定时器,调度器等。 RT-thread程序内存分布 program size code:代码段 RO-data:只读数据段,存放程序定义的常量 ...
动态创建一个main函数的线程,也就是主线程,分配栈空间,把主线程的入口定义为main_thread_entry(),然后通过rt_thread_startup()启动该线程。 main_thread_entry() 组件初始化等等,最后调用main函数 最后找entry的入口,在stm32的启动文件里。 从启动文件开始,我用的是正点原子的stm32F103ZET6精英板. ...