小容量单片机系统的C语言程序结构
小容量单片机系统的C语言程序结构是指在小容量单片机系统中使用C语言编写的程序结构。这种结构主要解决了小容量单片机系统中的代码组织性和任务管理问题。
在小容量单片机系统中,使用ASM51实现的代码往往缺乏组织性,导致代码结构非常松散。为了解决这个问题,可以使用C语言作为主要的开发语言,并使用时间片轮询方式来管理任务。
时间片轮询方式是指给每个任务分配一个时间间隔,当时间间隔到达时,运行该任务的代码。这种方式可以合理地使用系统定时器资源。
在小容量单片机系统中,数据类型的定义是非常重要的。可以使用typedef unsigned char uInt8来定义无符号整数类型,并使用struct来定义任务结构体,如下所示:
typedef struct {
void (*proc)(void); // 处理程序
uInt8 ms_count; // 时间片大小
} _op_;
在任务结构体中,proc是任务处理程序,ms_count是时间片大小。
在任务管理中,可以使用数组来存储任务信息,如下所示:
_op_ Op[proc_cnt] = {
{ic_check, 10},
{disp_loop, 100},
{calc_power, 150},
{set_led, 2},
…
};
然后,可以使用时间片刷新函数来刷新时间片值,如下所示:
void time_int1(void) interrupt 3 {
uInt8 cnt;
Time_Counter := Time_Unit;
for (cnt = 0; cnt < proc_cnt; cnt++) {
time_val[cnt]--;
}
}
在主函数中,可以使用循环来执行任务,如下所示:
void main(void) {
uInt8 cnt;
init(); // 程序初始化
interrupt_on(); // 打开中断
do {
for (cnt = 0; cnt < proc_cnt; cnt++) {
if (!time_val[cnt]) {
time_val[cnt] = Op[cnt].ms_count;
Op[cnt].proc();
}
}
} while (1);
}
这种任务管理方式可以解决小容量单片机系统中的代码组织性和任务管理问题,但也存在一些缺点,例如时间片的分配需要非常小心,以免导致执行频率较低的任务难以被执行。
在性能分析和任务拆分中,可以使用两种任务管理方式:流水作业调度和频率优先调度。流水作业调度是指按任务栈的顺序与时间片的大小依次进行调度,而频率优先调度是指按任务的执行频率来进行调度。
流水作业调度的优点是可以确保所有任务都能被执行,但缺点是可能导致时间片小的任务难以被执行。频率优先调度的优点是可以确保高优先级的任务被执行,但缺点是可能导致低优先级的任务被 starvation。
小容量单片机系统的C语言程序结构是非常重要的,可以解决代码组织性和任务管理问题,但也需要注意任务管理的缺点和优缺点。