YOS的一些设计说明

阎裕
2023-12-01
一.设计原则
 a.实时性,要求所有的任务挂起、就绪、运行都是可以预测和可计算的。
     1)在临界区代码,也就是被关闭和打开中断代码包含部分,不应该有for()和while注意的循环,因为注意的
       代码会随for和while包含的个数,线性变化。
     2)临界区执行时间和中断执行时间约束,
       例如:在一个ARM Cortex M3内核中,运行系统需要设置一个1ms的SysTick定时器和一个115200的串口.
            a.可由1ms的SysTick,可知执行时间 < 1ms.
            b.使用115200的串口,使用中断接收数据,则一个bit的间隔是10^6ns/115200=8.68ns,每10位构成以个字节,
              每个字节时间=8.68*10=86.8ns,所以执行时间<86.8ns.
            c.所以总的来说,执行时间要小于86.8ns,整个系统才能正常运行.
        注:1)这里也跟CPU频率有关系,频率高代码执行时间更快,更容易达到实时性。
           2)有人说,我要使用一个16MHz的SPI接收中断,则其他的间隔是10^9us/16M=62.5us,则1个字节=62.5*10=625us,如果说该值小于系统执行时间,
             则可能出现问题,一般情况来说,碰到这样高速接口,不要使用中断来接收数据,可以使用DMA来操作,减轻CPu负担.     
 b.支持抢占内核.
    高优先级任务在需要时,能够立刻得到CPU时间,对于实时系统来说这是不可少的。
    如按下按钮内,20ms需要执行1个任务,这里简单等按钮信号的任务为最高优先级,则可轻易满足该需求。
    但如果,该任务不是最高优先级任务,存在其他优先级任务,则这里任务等待执行时间是不可预期的,所以这需要你
    在任务设计时,需要考虑。
    注: 1)经常说实时系统,很多人认为是靠操作系统是保证的,当其实操作系统是一部分,任务设计合理性也是极其必须的。
        
 c.支持轮转调度.
   支持轮转调度,这对实时性是个考验,如果同优先级有多个任务,则这个任务获得CPU的等待时间,等于其他任务获得时间片的时间*任务个数.
   如果在按下按钮内,20ms需要执行1个任务,则这里的要求是
   其他任务执行时间片时间*任务个数 < 20ms,这里知因为该时间是随任务个数增加而增加,所以如果你要保持实时性必须限制在优先级下的任务个数。
   当然,这里我们也可以使用不支持轮转调度策略来屏蔽这个麻烦。
   
 d.为支持教学和研究,本项目代码将全部使用中文注释,一些特殊,关键字,也使用中文术语。
    个人认为这是一个重点,按国人的习惯来写注释,所以它完全是对国人是友好的。
 类似资料: