1

关于投票
我写MCU软件的模块规划

       续<<初写MCU的困惑>>

       在硬件规划好后,规划软件的写法,执行任务较多时,首先是考虑运行时间够不够,当然MCU不是奔腾,是要斤斤计较时间问题的,下面是说下自己的软件规划方法.

       首先看需要的功能哪个部分需要的循环时间最短,现举个例子: 有按键扫描,红外遥控接收,I2C传输,写LCD显示,RTC等.(有人习惯遥控接收用中断,有人不用中断,为了体现关于时间的划分,下面也不采用中断).下图是硬件简单描述(假设):

          点击看大图

        需要的最短扫描就是遥控接收了(惯例100US),我要把时间切成每50US一个时间片,每200个时间片一个循环,如下图:

         点击看大图

        1.遥控接收部分:占用1.3.5.7.9.....199.1 等时间片,此时的扫描周期刚好是100US,一般音频设备使用的是HT6221或PT2221等发射IC,在写判断1或0脉冲时,时间检测不要写的太精密,留+-100US公差.

        2.ENCODE检测也不用中断,1MS扫描一次,50US*20=1MS,用2.22.42.......182.2等时间片.

       3.按键检测,每10MS扫描一次,用时间片0.

       4.LCD驱动刷新,HT1621是3线传输,可是与标准SPI BIT数不一样,咱也只好用一般I/O传输.给它安排时间片4.两次刷新的间隔最短是10MS.

       5.I2C传输假设是VOLUME控制IC,虽然16F877带I2C功能,咱也不用,用I/O模拟.安排时间片6.两次刷新的间隔最短是10MS.

      6.其他设备用一般I/O控制,安排时间片8.两次刷新的间隔最短是10MS.

      7.周器是0.5S,全部的子程序只有这个要求一定要时间准,咱在定时中断里加几句计数,累积到1000返回,1000*50US=0.5S,秒.分.时.天.的处理放在第10时间片.

      以上时间片安排,大家留意一下,在每一个时间片里,最多处理一个子程序,而且还可以加很多子程序.没有使用多个中断资源,就用了一个定时器中断.RTC的时间照样很准.其它子程序时间延迟点无所谓,只是别延迟太久了,象LCD和模拟I2C可能时间长点,想办法分到几个时间片里去完成.

      子程序之间的通信,建议你单独留出一点RAM,初始化时指定给某些子程序用,或开个时间片处理之间的通信,这点不多讲了,留给有兴趣的人去考虑.这写法是不是也可以叫"多任务"呢?但不是抢断式的,这样设备的程序也不需要抢断.8051 KEIL里有带个RTOS,我只是不太喜欢用它,比较麻烦,用的时候不太灵活,每个任务要求的周期也大.资源也需要的多.

        不管用啥方法,只要能满足产品要求就行.以后如果有时间,会写点嵌入式的东西(ARM----LINUX)!我老是在笑自己是不是走的土八路的道路,表达方式欠佳,很可能没人看的懂!如果是,就当你没看到过,但是我不希望你打击我的写博热情!

系统分类: 单片机
用户分类: 软件技术类
标签: 我写MCU软件的模块规划
来源: 原创
发表评论 阅读全文(977) | 回复(2)

2

关于投票
初写MCU软件的困惑

         写MCU软件这几年,写程序的技巧也积累了一些,记忆最深的还是当初是如何从书本知识转向产品实用的.

        初学MCU时,教程上和老师讲的软件编写方法,真正用到产品设计上时就感觉到了很不实际.举个很简单的例子,在设计一个有按键和红外遥控输入的产品时,按照一般图书教程上做,写按键检测程序肯定有:读取I/O--->延时10mS--->再读取比较I/O数据.可是想想如果在延时10mS的时间里,红外信号到来,处理器正在等待10mS结束,软件不能及时检测到完整正确的遥控输入.有的人可能会想到用中断,这时如果你的MCU是不带中断的,比如PIC16C5X系列的,咋办?

       周围做MCU软件的同事聊天时,一致认为都遇到过这情形,而且都是绕了很大的弯才迈过这道坎,惭愧,本人也是如此.
      下面就以以软件模块的形式描述一下如何实时处理多个任务,这个例子只适用于简单的小程序,遥控和按键子程序要安排时间计数,计算时间到了没有,有心计的可以安排遥控和按键不要在同一个100US内处理.
 
                                             
 
         上面这个方法,前提是要保证一个循环周期执行最长时间不能大于100微秒,稍复杂点的就不能这样做了.后续会再描述些稍复杂的写法.
 
系统分类: 单片机
用户分类: 软件技术类
标签: 初写MCU软件
来源: 原创
发表评论 阅读全文(1025) | 回复(1)
总共 , 当前 /