简易内核调度设计 --基于TQ2440(ARM9)的实现(4)

作者:姜广伟
日期: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值