最简单的裸机应用伪代码:
void timer_interrupt_0(){ //定时器中断,boot_timecounts, systicks. task schedule
}
void uart_interrupt_1(){ //user interface, log,
}
void main(){
led_test();
bsp_init();
do{
task1(); //led toggle
task2();
} while(1);
}
对于以上程序我们需要理解到的:
1. main函数是如何执行来的? 为什么是main?main之前还做了什么准备工作?
1)通常的mcu上电后执行复位时序,pc=0,即执行的第一条指令位于flash的0地址。(有的处理器本身固化了启动代码),通常存放的是中断向量(可变,如在Keil中可通过 改变C51->interrupt vectors at address 来配置中断向量的存放地址,每个中断向量即为一条跳转指令,跳转到中断函数)。
2)IDE工具中都有针对特定mcu的C语法。
2. 硬件板卡如何测试调试,需要注意的地方?
1)主控启动 (供电,复位,时钟)。
2)led_test();做硬件io测试,同时可以确认程序有正常启动运行。
3. 前后端任务模式的利弊。
优势:逻辑简单, 面向过程处理,适合完成简单,特别是较为单一的工作。
缺点:软件规模大了,很难管理,扩展性差, 实时性也难以保证(实时性尤为重要)。