金牌会员
 
- 积分
- 1108
- 金钱
- 1108
- 注册时间
- 2018-11-6
- 在线时间
- 240 小时
|
发表于 2020-7-2 23:40:51
|
显示全部楼层
本帖最后由 霸王猫 于 2020-7-3 11:16 编辑
1、从裸写程序到FreeRTOS这类实时操作系统写程序的时候写程序思维的转变(裸写都是顺序写就行了,弄个全局变量,标志)?
是的,思路要完全转变(当你掌握了FreeRTOS编程后再回过头来才发现原来如此)。
因为祼机编写程序是顺序执行(只有中断服务程序打断时才跳跃执行),而FreeRTOS这类实时操作系统写的程序执行时完全是跳跃执行(注:任务之间是跳跃执行,任务内是顺序执行)。
2、FreeRTOS是不是无法用JLINK、STLINK这类调试啊?要怎么调试FreeRTOS?我一调试FreeRTOS的时候mdk一会儿就卡死了。
FreeRTOS可以用JLINK、STLINK这类调试。
我一调试FreeRTOS的时候mdk一会儿就卡死了,是因为程序中堆栈的原因。
3、是不是在操作系统上就最好不要用全局变量了,如果还像裸写那样全都用全局变量会怎么样,有什么影响?
既然用了操作系统,当然最好不要用全局变量了。只是在某些特定的场合下可以用。
如果还像裸写那样全都用全局变量,会出现如下问题:
假设某个任务A写一批数据X1,X2,X3,
某个任务B读任务A的数据X1,X2,X3
当任务B正在读数据并正在进行处理时,假设此时已经读了X1,准备读X2,X3
这个时候进行了任务切换,跳转到任务A执行,任务A又将X1,X2,X3进行了修改,修改后的值我们标记为X1_,X2_,X3_。
接着又进行任务切换跳转回任务B,任务B接着处理X2,X3,但是此时的X2和X3已经不
是之前和X1配对的X2,X3,而是变成了X2_和X3_。
也就是说任务B取到的这批数据实际上已经不是X1,X2,X3了,而是变成X1,X2_,X3_了。
4、在学习FreeRTOS的过程中,我发现,弄懂了它的一些数据结构,比如列表啊、列表项、任务控制块、队列等,还有他们之间的组合关联的关系,再去看内核代码,就能大致看懂它干了什么了。
不学习数据结构是看不懂FREERTOS操作系统内核的。必须掌握数据结构如下知识
(1)、顺序表
(2)、堆栈
(3)、队列
(4)、链表 |
|