除了空闲线程钩子,RT-Thread系 统还把空闲线程用于一些其他的功能,比如当系统删除一个线程或一个动态线程运行结束时,会先行更改线程状态为非调度状态,然后挂入一个待 回收队列中,真正的系统资源回收工作在空闲线程完成,空闲线程是唯一不允许出现阻塞情况的线程,因为RT-Thread需要保证系统用于都有一个 可运行的线程。
编译完成后,我们可以通过 MDK-ARM 的模拟器来仿真运行 RT-Thread,如下图: 进入仿真页面后,再按 F5 开始运行;然后点击工具栏中的按钮,或者选择菜单栏中的“View→Serial Windows→UART#1”,打开串口 1 窗口,可以看到串口的输出只显示了 RT-Thread 的 LOGO,这是因为用户代码是空的,其模拟运行的结果如图所示: 在...
直接去官网下载 RT-Thread源码和env 启动env 在env目录下env.bat cd 到rt-thread目录下bsp/qemu-vexpress-a9目录下,直接运行scons编译 然后输入qemu就能运行了 RT-Thread 支持 Finsh,用户可以在命令行模式使用命令操作。输入help或按 tab 键可以查看所有支持的命令。如下图所示,左边为命令,右边为命令描述。 如下图...
RT-Thread 的启动函数定义位于 rt-thread/src/components.c,包括硬件初始化、系统对象初始化、调度器初始化等一系列启动流程。最后会将启动主线程,执行main()函数。 intrtthread_startup(void){rt_hw_interrupt_disable();rt_hw_board_init();/* board level initialization */rt_show_version();/* show RT-...
在开始 RT-Thread 内核学习之前,先来体验一下 RT-Thread。 要体验 RT-Thread,首先需要具备运行环境或者实验环境。RT-Thread 不仅可以在实际硬件平台上运行,也可以在虚拟环境下实验运行。 如果只是为了学习内核知识,并配合练习实验,虚拟环境就可以了。如果有实际的硬件环境,当然会更好。 官方的学习资料中,介绍了两种...
编译运行 进入bsp\qemu-vexpress-a9文件夹,打开 Env 工具,输入scons指令,开始编译,编译成功后如下图: 编译成功后,输入qemu.bat,运行程序 Env 命令界面显示 RT-Thread 系统过程中打印的信息,包括初始化信息和版本号信息等。 RT-Thread 支持 Finsh 功能,用户调试和查看系统信息,用户可以使用命令进行操作。输入help或者...
一个开发板上的RT-Thread的启动流程可能是首先从bsp当中链接脚本指定的startup_xxx.S中的入口函数(ENTRY)或者复位异常处理函数(ResetHandler)开始运行,这部分我们在讲bsp支持时会详细讲解。 之后跳入entry函数(GCC,使用不同编译器会进入不同的函数)执行,这里也可以跳入用户自己的main函数,但是需要...
1.main()调用线程控制函数rttthread_startup()开启线程循环 2.rttthread_startup()调用rt_application_init()用户应用初始化 3.rt_application_init()调用用户函数【就是自己写的函数】demo() 4.demo()里调用rt_thread_init()为自己test1()函数注册静态线程 ...
本文简单探讨了RT-Thread 4.0.5版本在STM32L431RCTx Cortex-M4内核上,创建main线程、tidle0线程后,从使用MSP的特权模式,启动至使用PSP线程模式的main线程栈帧恢复全过程。 SP寄存器有两个,分别是MSP和PSP,其中,从复位启动后使用MSP,通过启动代码、RT-Thread初始化、启动调度器的过程,切换至使用PSP的线程中运行。
module_init()函数会在动态模块运行前被执行,用户可以根据需要做一些初始化工作。 module_cleanup()函数会在动态模块运行结束后在 idle 线程里回调一次,执行用户设置的清理工作。 RT-Thread 系统会自动创建一个线程执行动态模块中的 main 函数,同时这个 main(int argc, char* argv[])函数也可以接受命令行上的参数...