一.目前嵌入式mcu应用代码的几种架构
1.1顺序执行架构
顺序执行架构运用最多,就是在一个while(1)大循环里面一条一条代码按顺序运行,从上到下,循环往复。

1.2时间片轮询架构
时间片轮询架构就是我们本文章介绍的一种架构,原理是启动一个定时器心跳,不停地计数,递减每个任务运行的间隔时间。某个任务间隔时间递减至0,那么运行此任务的功能函数,间隔时间重置。然后不停的重复往返轮询。

1.3操作系统
此类架构为带操作系统,目前使用比较多的操作系统有ucos,freertos,rt-thread等等。

二.源码
原理上节已经介绍了,源码非常精简,直接阅读使用吧。
#include<stdio.h>
#include <string.h>
#include<time.h>
#include<windows.h>
typedef struct
{
int time_count; //任务将要运行的等待时间,一直递减变化
int period; //任务运行的间隔时间
void (*task_func)(void); //任务执行函数
}_task;
void task_1(void)
{
printf("this is task 1 !\n");
}
void task_2(void)
{
printf("this is task 2 !\n");
}
void task_3(void)
{
printf("this is task 3 !\n");
}
static _task task_components[] =
{
{10,10,task_1},
{20,20,task_2},
{30,30,task_3},
};
void task_scan(void)
{
int i = 0;
for(i=0; i<sizeof(task_components)/sizeof(_task);i++){
if(task_components[i].time_count == 0){
if(task_components[i].task_func != NULL){
task_components[i].task_func();
task_components[i].time_count = task_components[i].period;
}
}
}
}
//放入定时器中断中去
void task_time_elapse(void)
{
int i = 0;
for(i=0; i<sizeof(task_components)/sizeof(_task);i++){
if(task_components[i].time_count > 0){
task_components[i].time_count --;
}
}
}
DWORD WINAPI ThreadFun(LPVOID pM)
{
while(1)
{
task_time_elapse();
Sleep(20);
}
}
void main(void)
{
HANDLE handle = CreateThread(NULL,0,ThreadFun,NULL,0,NULL);
while(1){
task_scan();
}
}