zl程序教程

您现在的位置是:首页 >  其他

当前栏目

​手写一个RTOS.2(编程模型)

2023-04-18 15:55:16 时间

参考的freeertos使用v9.0的版本。

自己下载的话,点击这个,也可以去我的Github上面下载

Keil里面的char默认是没有符号的,可以在这里配置为又符号的

头文件配置成这样的

  1. 用户代码
  2. 相关头文件
  3. 相关处理器的接口
/*----------------------------------------------------------------------------
  Define clocks
 *----------------------------------------------------------------------------*/
#define  XTAL            ( 5000000UL)      /* Oscillator frequency */

#define  SYSTEM_CLOCK    (5U * XTAL)

然后system.c 的配置是这样的。

五五二十五了

更改是为了和仿真一样

这就算是解决上篇文章的所有心病啦~

其实我本应该直接上来写代码的,可是我费劲儿还写文章,所以我不介意再复杂些,把它说透。

我插一句,使用RTOS的时候,其实某种程度是不需要考虑这个顺序关系的,就是你创建的任务以后会根据调度去运行,顺序执行的观念被淡化了好多。

我们的51,或者Arduino这些比较简单的单片机,使用的编程模型(抱歉我的自大,给了起了名字)是轮询系统,说人话就是一个大循环,放上我们的子函数,开始运行,一次又一次。

就好像这样

它在做不需要响应外部事件的时候工作很漂亮~很漂亮,也叫裸机编程,对实时处理的事件反应不好。

我们给它升级一下,改善它的外部驱动功能。也叫前后台系统

顺序执行的时候,有个中断来了,那么系统的资源就给这个中断事件用了,如果这个事件很短那就再中断里面处理,长的话就去后台处理。加上中断的嵌套,这东西用的好还就是个操作系统的感觉。

这里画图了一下,就是这样的感觉

其实我觉得多任务系统,就是前后台系统,只不过更精妙一些而已。

大概是这样,具体的代码去Github看

在这个系统里面,根据功能的划分,我们把程序主体分为一个一个的小的死循环而且不返回任何东西的小程序。

一个任务

它们独立,互不干扰,还带有优先级(就像阶级一样)。编号以后给操作系统统一管理。也就是我说的,不用管执行顺序的问题了。