f*******t 发帖数: 49 | 1 在看一个项目的源码,原来设计中,用2个input capture中断来读取传感器的pulse
input,通过计算这个PULSE的频率,来得出工作的速度。
现在看源程序,这个频率最快,可以达到1000HZ,就是1ms就要中断一次。
同时程序中还有18个task, 其中的9个,是10ms 调度一次。其他的大概5个50ms, 4个
100ms. 任务和底下的中断的优先级差不多,一个最高级,其他的任务分2个优先级,差
不多一半2,一半3.
同时程序中还有8个其他的中断,分别是AD和Timer中断。中断分3个优先级,一个1级,
最高,剩下大概4个2,4个3.
还有个看门狗中断, 最长52ms计时, 原设计是10ms 喂狗一次。
RTOS是基于优先级的抢占式的实时系统。
有没有高手帮着分析下,这样的时间安排,是不是不太好。
我是被这些中断,TASK, WDT,给弄得分析不出来这个时间关系会否冲突了。 |
i*****t 发帖数: 24265 | 2 RTOS?怎么可能才1ms?1Khz也算最快?
windows都能做到1000hz的,还不是rt。
如果真是rt,这些任务足以满足。 |
i*****t 发帖数: 24265 | 3 sensor的pulse输入话,脉宽时间范围是几十到几百毫秒,1Khz足够了 |
i*****t 发帖数: 24265 | 4 俺意思就是,如果CPU不是单片机的话,这些任务用10+N年前的PII足以解决,没任何问
题,既然源码如此,说明人家就是试验成功过的吧,没必要担心什么调度,1Khz真不算啥 |
f*******t 发帖数: 49 | 5 就是单片机,内部时钟40MHZ, 25 ns.
只是感觉一个中断源,就1ms中断一次,来记录PULSE的输入,有没有更好的方式呢。
例如这里,2个SENSOR,就有2个中断源,各每1MS中断一次。 |
i*****t 发帖数: 24265 | 6 单片机的话,俺不用rtos,可以多个计时器中断,一切尽在掌握中
而如果用rtos,则就不一定了,需要看rtos了
【在 f*******t 的大作中提到】 : 就是单片机,内部时钟40MHZ, 25 ns. : 只是感觉一个中断源,就1ms中断一次,来记录PULSE的输入,有没有更好的方式呢。 : 例如这里,2个SENSOR,就有2个中断源,各每1MS中断一次。
|
f*******t 发帖数: 49 | 7 它是用input capture中断来捕获Sensor的输入信号。
因为Sensor是一个霍尔传感器,用来检测一个运动齿轮的速度,但这个齿轮的转速是在
一定范围内可变,可调(用户根据应用来调整的)。
最慢可以几HZ, 最快1000 HZ。所以,这个输入中断发生的频率也就是几HZ, 1000HZ之
间。
但是RTOS还有18-19个任务,同时该程序还有另外10来个中断。
我担心会不会导致有的任务长时间内得不到运行时间,或者干脆给饿死呢?
【在 i*****t 的大作中提到】 : 单片机的话,俺不用rtos,可以多个计时器中断,一切尽在掌握中 : 而如果用rtos,则就不一定了,需要看rtos了
|
z*****n 发帖数: 7639 | 8 如果那18个task都是靠一个timer的基准时钟来调度的,
应该不会有太大冲突,它们只算一个竞争者。
watchdog如果也是靠同一个timer的基准时钟来更新的,也可以不算。
最后系统在这两个external interrupt上有多精确,跟有多少
同级和更高级的hardware interrupt有关,也跟你的ISR的复杂度有关。
不过一般系统都是external优先级最高,so,improve的办法是
1)用高时钟频率的芯片,
2)尽量减少ISR的时间复杂度。
【在 f*******t 的大作中提到】 : 在看一个项目的源码,原来设计中,用2个input capture中断来读取传感器的pulse : input,通过计算这个PULSE的频率,来得出工作的速度。 : 现在看源程序,这个频率最快,可以达到1000HZ,就是1ms就要中断一次。 : 同时程序中还有18个task, 其中的9个,是10ms 调度一次。其他的大概5个50ms, 4个 : 100ms. 任务和底下的中断的优先级差不多,一个最高级,其他的任务分2个优先级,差 : 不多一半2,一半3. : 同时程序中还有8个其他的中断,分别是AD和Timer中断。中断分3个优先级,一个1级, : 最高,剩下大概4个2,4个3. : 还有个看门狗中断, 最长52ms计时, 原设计是10ms 喂狗一次。 : RTOS是基于优先级的抢占式的实时系统。
|
i*****t 发帖数: 24265 | 9 input捕获中断,其他还有timer ad等中断,其实用中断效率最高
俺认为最高1000hz输入中断对于40MhzMCU应该没啥问题
【在 f*******t 的大作中提到】 : 就是单片机,内部时钟40MHZ, 25 ns. : 只是感觉一个中断源,就1ms中断一次,来记录PULSE的输入,有没有更好的方式呢。 : 例如这里,2个SENSOR,就有2个中断源,各每1MS中断一次。
|
b****2 发帖数: 61 | 10 如果是单片机运行RTOS,我觉得你可能要注意最坏情况下,某个任务是否因不能在规定
时间内完全执行而导致整个系统内存溢出。
去年我正好用80MHz的单片机做了个带RTOS的系统。因为带TCP/IP栈,在任务内存分配
和优先级上费了不少功夫。该系统的TCP/IP栈要求一定级别的优先级,使得有些任务得
不到足够的运行资源而消化不掉该处理的数据。
如果你的每个任务都在你的掌控制中还还好一些。另外很多单片机你把数据放在芯片内
的SRAM或外部RAM运行速度差很多。 |