单片机开发-应用程序架构

文章目录

tennfy在工作中也会用到单片机,很多时候,写程序不注意架构的话,在后期维护中会出现麻烦。本篇文章中会简单的介绍下单片机常用的几种应用程序架构,既方便自己,也方便朋友们。

前后台顺序执行法

前后台顺序执行法是最容易的架构,将功能按照顺序一点点向下执行,对于编程人员来说思路很清晰。不过这样的问题是:代码多了以后很难维护。

如果采用前后台顺序执行法编写比较复杂的应用程序,一定要先理清头脑,设计好完整的流程图再编写程序,否则后果很严重。当然应该程序本身很简单,此法还是一个非常必须的选择。

时间片轮询法

所谓时间片轮询法,我的理解就是将定时器任务由顺序执行改为定时器中断触发,让任务的执行变得相对同步。同时,为减少定时器中断处理的压力,在主循环中轮询定时器触发标志位。

为方便理解,现举例如下:

首先我们定义定时器任务结构体为:

1
2
3
4
5
6
7
typedef struct _TIMER_TASK
{
    u8 Run;                  // 程序运行标记:0-不运行,1运行
    u8 Count;                // 计时器
    u8 Interval;              // 任务运行间隔时间
    void (*TaskCbf)(void);  // 要运行的任务函数
} TIMER_TASK;                // 任务定义

然后,在定时器中断中调用如下函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
 *  Function Name  :  TaskInt()  
 *  Description    :  Timer Interrupt function
 *  @Para          :  None
 *  @Return        :  None
 */
void TaskInt(void)
{
    u8 i;
    for (i=0; i<TASKS_MAX; i++)                                 // 逐个任务时间处理
    {
        if (TimerTasks[i].Count)                                // 时间不为0
        {
            TimerTasks[i].Count--;                              // 减去一个节拍
            if (TimerTasks[i].Count == 0)                       // 时间减完了
            {
                 TimerTasks[i].Count = TimerTasks[i].Interval;  // 恢复计时器值,从新下一次
                 TimerTasks[i].Run = 1;                         // 任务可以运行
            }
        }
   }
}

在main()函数主循环中调用如下事件处理函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
 *  Function Name  :  TaskProcess()  
 *  Description    :  Process Timer task
 *  @Para          :  None
 *  @Return        :  None
 */
void TaskProcess(void)
{
    u8 i;
    for (i=0; i<TASKS_MAX; i++)      // 逐个任务时间处理
    {
        if (TimerTasks[i].Run)       // 时间不为0
        {
            TimerTasks[i].TaskCbf();  // 运行任务
            TimerTasks[i].Run = 0;   // 标志清0
        }
    }   
}

操作系统法

操作系统可以让我们不必理会任务调度等方面的事情,但是,带来的问题就是操作系统的移植、资源的消耗、甚至于Licence的费用。

51arduino中很少用操作系统,stm32中则用的非常多。ucosII、ucosIII、freertos、RTThread都是目前很火的轻量级实时操作系统。它们的使用方式都比较类似。任务调度以优先级抢占和时间片轮转为主。

建议大家根据自己的需求来决定是否使用操作系统。

参考文章:浅谈单片机应用程序架构



本文出自 TENNFY WU,转载时请注明出处及相应链接。

本文永久链接: http://www.tennfy.com/4424.html

下一篇文章:

上一篇文章:

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

8 + 5 = ?


您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

返回顶部