作者:姜广伟
日期:2010-12-28
邮箱:Guangwei.jiang@gmail.com/jgw2008@126.com
1. 引言
本章,我们继续完善KernelSched这个程序:
a. 加入Critical Section, 防止同时操作LED,造成LED1和LED2同时点亮;
b. 在HandleIRQ中,加入对Timer0中断源的判断。
实验环境说明:
本实验的操作平台为TQ2440(ARM9)开发板,程序代码在S3C2440“SteppingStone”的4KB内部RAM中运行。程序就是利用这4KB的空间来实现多任务的切换。
请选择从NAND Flash启动,并将生成的二进制文件烧到NAND Flash中。
当选择从NAND Flash启动CPU时,CPU会通过内部硬件将NAND Flash开始的4KB字节数据复制到“SteppingStone” 的4KB内部RAM中(此时内部RAM的起始地址是0),然后跳到地址0开始执行。
下面,还是先看看Task1和Task2的代码,
2. 详解改进部分
加入Critical Section, 防止同时操作LED,造成LED1和LED2同时点亮;
–在HandleIRQ中,加入对Timer0中断源的判断。
2.1加入Critical Section, 防止同时操作LED,造成LED1和LED2同时点亮
a. 进入临界区,关闭Irq中断;
b. 退出临界区,恢复Irq中断。
2.2在HandleIRQ中,加入对Timer0中断源的判断
读取“Interrupt Offset Register”,判断是否是Timer0中断源,若是,则跳转到Timer0_Int,执行内核调度。
本文源代码可以从作者的github下载,链接如下
https://github.com/GuangweiJiang/diy_kernel/tree/master/04_KernelSchedEx