简单来说,$Sub$$和$Super$$具有补丁功能,可以给一些函数打上“补丁”,如RT-Thread的内核文件component.c中就给我们的用户主函数main打上了”补丁“。 在rtthread_startup函数中:主要实现了板级初始化(如led的初始化,串口初始化就是在这里边调用的);打印RT-Thread的logo和版本信息;初始化系统定时器;初始化调度...
Linux、RT-Thread 等操作系统为五花八门的硬件实现了一致的硬件接口,也就是常说的设备驱动框架。正因如此,软件工程师可以专注于软件开发,而不用关心底层的硬件,也不用重复造轮子。 软件生态 RT-Thread 丰富的软件生态为大量的从业者带来了巨大的改变。操作系统带来的模块化和重用性,使得程序员可以基于 RT-Thread ...
具体原因是从机设备在回数据,还没有发送完成,主机时钟消失,从机等待时钟信号, MCU重启,如果从机设备的电源没有复位,从机继续等待 MCU 时钟信号,数据一直被钳住,总线无法完成数据交互。 3.1.2 解决方式 解决重启导致总线死锁,一种方式可以如同 rt-thread 驱动解决方式一样,在系统复位的时候,提供9个时钟信号,解初...
/* the systemmain thread */void main_thread_entry(void*parameter){extern int main(void);extern int $Super$$main(void); /* RT-Thread components initialization*/ rt_components_init(); /* invoke system main function */#if defined(__CC_ARM) || defined(__CLANG_ARM) $Super$$main(); /...
按键唤醒示例:系统进入深睡眠(DEEP),通过按键中断唤醒并请求指定的电源模式 【NUCLEO-L476RG】开发板,只有一个用户的按键,引脚为:【PC13】,换算成RT-Thread PIN num,为:16 + 16 + 13 = 45 Key 代码如下: #include"key.h"#include<rtdevice.h>#define DBG_ENABLE#define DBG_SECTION_NAME "key"#define ...
从上图可以看出,中断或异常的服务程序,总是处于特权级处理模式的。而RT-Thread系统内核复位上电时启动的主线程(main线程),是运行在特权级线程模式的。其他用户创建的线程,是运行在用户级线程模式的。 为什么处理器要区分特权级和用户级?特权,顾名思义就是处理器如果工作在这个级别下,权限就会比较高,就可以访问一些...
rt_system_scheduler_start() 调用 rt_hw_context_switch_to((rt_uint32_t)&to_thread->sp)。 我们的代码,也从 这里开始。 打开其源码: 然后我们画出内核的框图: 我把几个必要的全局参数也画了进去,方便观察。 然后是我们要运行的线程,在内存的结构如图所示: ...
简单来说,$Sub$$和$Super$$具有补丁功能,可以给一些函数打上补丁,如RT-Thread的内核文件component.c中就给我们的用户主函数main打上了”补丁“。 在rtthread_startup函数中:主要实现了板级初始化(如led的初始化,串口初始化就是在这里边调用的);打印RT-Thread的logo和版本信息;初始化系统定时器;初始化调度器;...
rtthread操作系统是以线程为单位运行的,一个系统里面可以有无数个线程,调度器就是这些线程的管家,它保证:每时每刻只让存在于就绪状态中的优先级最高的线程持有CPU的使用权。这篇文章,我从调度器的初始化,创建,调度,挂起等几个方面来解读rtthread的源码。
7.打开 PC 上串口工具 xshell,配置打开串口(配置串口参数为 115200-8-1-N、无流控),然后按下复位后就可以在串口 1 连接的终端上看到 RT-Thread 系统启动日志,并可以看到 AT Client 的启动日志、SAL 的启动日志且设备自动连接网络成功,说明 AT Socket 功能初始化成功,如下图所示。3.3.2AT Socket 使用...