请教基于RT THREAD 数码管动态显示的方案
大家好!手上有个项目,想尝试下RT THREAD。MCU为:STM32F103VB, 有一要求是:采集到的数据要实时显示在8个数码管上(动态显示)。现系统滴答时间为1MS,数码管线程为次高优先级。当线程数少时,数码管显示正常,可线程数较多时,人眼可明显感觉到数码管闪烁。
系统滴答时间不能再小了,太小怕对整个系统造成不稳定。各位有没其它思路呀?谢谢大家! 我认为是你的数码管的扫描方式有问题,线程多的话,线程的两次执行之间的间隔就会较大,这样动态显示就会看出问题。解决方案,你可以将数码管的扫描方式换成静态(感觉这个是根本的解决方法),或者将线程的时间片设定小一些,这样线程的轮换会快一些。另外,将数码管的线程优先级提高(这样有可能会对采样造成影响)。 数码管虽然频繁,但执行的时间短,可以适当调高优先级。
调高心跳只会加重系统负担,对问题没有改善。 用数码管驱动芯片,例如 TM1628 等,释放CPU资源。 系统tick太快了,一般5ms绝对够了
你可以采用带锁存的io片子,这样不是更加简单嘛 能否tick 设置为2ms,然后++5次后 rtt的tick增加一次
另外,ucos作者有一本书《嵌入式系统构件》里面对数码管键盘aio dio之类的外设做了一套很好的程序。 放在Tick中断里对数码管进行显示,以状态机的方式扫描,就跟线程数没关系了。 armstrong 发表于 2012-7-31 10:00 static/image/common/back.gif
放在Tick中断里对数码管进行显示,以状态机的方式扫描,就跟线程数没关系了。 ...
用钩子更好,那样代码更加规范, 可以考虑将一些线程合并为一个线程,其实你要是光采集数据实时显示的话,一个线程都能完成。 我做过类似的应用,扫描的数码管超过100个,用STC51的芯片,跑SmallRTOS51 12M 晶振。动态扫描要求按规定的时间扫描(点亮是时刻及点亮的时长),要不然即使你的扫描速度比理论要求高,都能感觉得到闪烁。而线程由于一些原因会造成扫描间隔及点亮时间长度不能到达要求(或快或慢)。当时我的处理方法是用钩子函数,放到tick中执行,灭了上一行,点亮下一行就离开。 刷新数码管这种简单的底层操作放在中断服务里就可以,不必用线程来干. 目前我也碰到类似问题,如果实时性要求高,就要用裸奔代码写的话,我的板子一大半程序都是裸奔程序了。。。
页:
[1]