日志档案

发表于 2007-8-2 18:07:17

0

标签: 我写MCU软件的模块规划  

我写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)!我老是在笑自己是不是走的土八路的道路,表达方式欠佳,很可能没人看的懂!如果是,就当你没看到过,但是我不希望你打击我的写博热情!

系统分类: 单片机   |   用户分类: 软件技术类   |   来源: 原创   |   【推荐给朋友】

    阅读(938)    回复(2)  

投一票您将和博主都有获奖机会!

  • eagle

    2007-8-9 8:43:04

    安排得不错,不过有一个缺点,必须保证每个子程序执行时间不能超过50US.否则会有跳时间片.

    不知所说是否有理,请指教

  • 笔者

    2007-8-13 18:00:54

    回复楼上的同行:

            此些法确实安排的不是很严谨,但是这些除了RTC外,其他都可以稍微延迟一两个时间片应该是没问题的  ------       “就用了一个定时器中断.RTC的时间照样很准.其它子程序时间延迟点无所谓,只是别延迟太久了,象LCD和模拟I2C可能时间长点,想办法分到几个时间片里去完成.”