uC/OS-II的时钟频率的设置问题,os_ticks_per_sec多大?
[复制链接]
这几天把uC/OS-II移植到了CM3处理器上,同时也大概的了解了一下其内核,以及其运作原理。其他便不多说,我能看到的大家都能看到,这里说一下我的一个不理解的地方。
举个例子,Task1运行100us完成电流闭环的调节,且300us后再运行该任务,Task2运行100us完成高压闭环的调节,且200us后再运行该任务,问题是,我要怎么让两个任务在500us之内运行完,前提是将uC/OS-II系统移植到ARM处理器中,那么,系统定时节拍应该设为多少时间中断一次呢,即,OS_TICKS_PER_SEC = ?
我在一个群里面问过几位高手,高手的回答是说这个问题很简单,指责我想的太过复杂,有一位高手给我的回答是1000,然后列举出一大堆的其他操作系统的取值。哎,我要的不是经验,是情景分析,说经验,当年我玩linux的时候你还不知道在干嘛呢。
他给我的答案是正确的,一般的ARM处理器移植uC/OS-II后,其OS_TICKS_PER_SEC = 1000,即节拍定时器每1s/1000=1ms定时一次。问题来了,那么,我要怎么完成我的任务呢?
其实这个问题确实很简单,想清楚了就真的很简单,答案是,ARM系统根本就做不到那么快,可是可以,我们可以将OS_TICKS_PER_SEC的值设置为我们需要的值,但这增加了系统的额外开销,我相信这是不允许的。
下班后与许工讨论了一下这个问题,首先来说以下OSTimeDly(Ticks)这个函数,这个函数你可以说他是起到一个延时的作用,但是他其实真正的内涵是将CPU让给其他的任务,将自身的任务延时Ticks个1ms(比如OS_TICKS_PER_SEC=1000),在OSTimeDly(Ticks)中调用OS_Sched()函数找出任务就绪列表中优先级最高的任务并将当前CPU切换到该任务。
|