RAW OS 基于STM32F1/F4 学习笔记 I
之前在写帖子“UML学习笔记 状态机部分”时jorya_txj向我介绍了他的RAW OS,于是当时就决定搞定量子平台的初步应用并看一篇RTOS的文章后就开始研究jorya_txj的OS。根据jorya_txj发的帖子,我给自己定了一个学习计划表,不求多,一天搞定一个点。计划9天学习完,当然,深入理解绝对不是9天可以完成的事。还需要仔细专研。
之前做东西没有涉及过任何的RTOS,所以,我使用的技术语言可能比较幼稚,大牛轻拍。
和其他所有东西的学习一样,在学自己罗列出来的9个点之前必须把实验平台给搭建起来。为了实现对比,我采取了STM32F1与F4同时实验的方法。
实验硬件:F4来自现在实习的公司产品用到的一块屏,F1来自于红牛开发板。
移植过程分为4步。
第一步:移植文件
在jorya_txj的官网上我下载了两个工程,分别是F4和F1的RAW OS DEMO,已经贴在附件上。楼主计划将RAW OS 移植到当前正在写的F4的工程上,F1就基于RAW OS DEMO调试
将F4 DEMO中的system目录下的user_extensio.c kernel文件夹,port文件夹全部添加到本身的工程。编译时可以过的。
请注意,将cpu.asm也要移植到工程,这里面有很多内核函数。user_extensio也要注意移植到。
第二步:对原工程适当更改:其实就是注意在SysTick_Handler中添加如下几句话而已。
raw_enter_interrupt();
task_0_tick_post();
raw_finish_int();
楼主移植时这里有一段插曲,QP实现时用到了PendSV_Handler RAW OS 也用到了 PendSV_Handler,为了先移植好RAW OS ,只有先把QP给砍掉了。
第三步:自己创建一个任务:
相关代码:
#define TEST_TASK_STK_SIZE 512
PORT_STACK test_task_stack1;
RAW_TASK_OBJ test_task_obj;
void test_task1(void * pParam)
{
你想只干一次的事;
while(1)
{
你想一直干的事;
}
}
raw_task_create(&test_task_obj, (RAW_U8 *)"task1", 0,
13, 0, test_task_stack1,
TEST_TASK_STK_SIZE , test_task1, 1);
第四步:测试任务:
这是楼主的测试过程,在F1 与 F4中都有测试,通过仿真界面可以看出来,每一次SLEEP过后都过了500MS。
至此,移植完成:)
去解决晚饭问题了,晚上开始自己的RAW OS 第一课:任务管理
问题一是我发现的一个小问题F1 和F4 DEMO 的RAW_CPU_H 的两个宏定义不一样。
这是不应该的,当然,这只是小问题啦 {:victory:}{:victory:}{:victory:} 写的很详细,希望楼主持之以恒,学习当中遇到问题,随时联系我,谢谢支持。
页:
[1]