FreeRTOS学习笔记(2)(MX基础配置+简单汇编)
本文介绍了使用FreeRTOS多线程实现LED灯不同频率闪烁的便捷方法。相比传统定时器方式,FreeRTOS通过xTaskCreate函数创建任务更简洁,文中展示了0.5秒和1秒闪烁两个LED的示例代码。此外,文章还简要讲解了如何通过Keil查看汇编代码,并列举了LDR/STR读写内存、ADD/SUB运算、CMP比较和B/BL跳转等基本汇编指令,帮助理解程序底层逻辑。通过FreeRTOS多线程和汇
上一篇文章是看完速通课程,但是感觉学的有点虚,所以补一补
对于FreeRTOS多线程的引入,就是,你可以去尝试一下用不同频率去闪烁LED灯,配上定时器代码会非常臃肿,但是使用FreeRTOS多线程操作就会非常,简洁。下面会展示FreeRTOS的版本,读者可以自己尝试使用定时器的方式去写

一般在CubeMX里基础配置就是这样
1.Cmsis文件是用来生成一个统一的接口,自动对于不统独底层的操作系统使用不同的任务函数
可以自己创建FreeRTOS任务函数,就是
BaseType_t xTaskCreate(函数,名字,栈深度,函数参数,优先级,句柄,)
BaseType_t xTaskCreate(函数,名字,栈深度,函数参数,优先级,句柄,)
xTaskCreate(MyTask,"Myself",128,NULL,osPriorityNormal,NULL);
void MyTask(void *argument)
{
while(1)
{
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_0);
vTaskDelay(500);
}
}
void StartDefaultTask(void *argument)
{
/* USER CODE BEGIN StartDefaultTask */
/* Infinite loop */
for(;;)
{
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
osDelay(1000);
}
/* USER CODE END StartDefaultTask */
}
这就是用1S和0.5S去闪烁两个LED真的已经很便利的,甚者这里创建任务的代码也可以在CubeMX里面直接配置
如果想要了解一些程序的底层逻辑就必须要学会,去看他的汇编原码,毕竟不管什么语言都是先翻译程汇编机器才能看懂
看汇编语言的方法有很多,我用的Keil,直接在Debug里打开汇编窗口,但是方法肯定不止这一招,可以去网上查一查,这里就不赘述了
介绍一些简单的汇编指令

这里名词可能不当 , 但是实质就是,机器看到的是机器码,翻译成汇编语言出来就是 指令+参数的形式
1读内存 : Load LDR是读4个字节 LDRB 一个字节 LDRH读2个字节
示例:
LDR R0 , [R1,#4] ; //读取地址“R1+4”,将得到的4个字节数据存到R0
2 写内存 : Stroe 同理 STR 4个字节 STRB 1个字节 STRH 2个字节
示例 :
STR R0 , [R1,#4] ; //把R0的4个字节数据写到地址“R1+4”
3 加减:
ADD R0 , R1 , R2 ; // R0 = R1+R2
ADD R0 ,R0 ,#1 // R0 = R0+1
SUB R0 , R1 , R2 ; // R0 = R1-R2
SUB R0 ,R0 ,#1 // R0 = R0-1
4比较
CMP R0 , R1 ; //结果存储在PSR寄存器里(程序状态寄存器)
5跳转
B main ; //Branch,直接跳转//直接进入main函数
BL main ; // Branch and Link ,先把返回地址保存在LR寄存器里再跳转
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)