KEIL MDK平台 S3C2440 UCOS-II的移植
本系列博文将从软件仿真开始一步步介绍KEIL MDK平台 S3C2440汇编/c语言程序的编辑、编译、链接、调试过程,以及建立裸机程序、移植ucos操作系统、移植ucGUI的全过程。
本帖将介绍基于KEIL MDK平台 S3C2440 uCOS-II移植的上机过程。硬件平台是友善之臂公司出品的micro2440核心板及底板套件。本文将介绍如何将S3C2440的ADS平台UCOS-II例程移植到MDK平台。
准备工作
1.首先准备一个可以在MDK平台下编译烧写的S3C2440裸机程序,可以参考上以章节https://blog.csdn.net/weixin_41551104/article/details/109897264。
2.其次准备一个ADS平台下的S3C2440 UCOS-II程序,可以在友善之臂的官网找到。
3.将ADS工程目录下的UCOS-II源码文件夹移动到MDK工程目录下。
移植
1.在MDK的工程中添加如下文件及目录
2.添加c语言包含文件夹。
3.添加汇编语言文件夹
4.UCOS-II移植中有两个关键点,一个是UCOS-II需要一个系统中断来进行上下文的切换,即任务调度。因此我们需要将IRQ中断交给UCOS-II处理,下列代码将OS_CPU_IRQ_ISR地址装入HandleIRQ中,即发生IRQ中断时系统跳转到OS_CPU_IRQ_ISR处执行UCOS-II中断服务函数,具体事情由它负责。
IMPORT OS_CPU_IRQ_ISR ;uCOS_II IrqISR
EXPORT HandleEINT0 ;for os_cpu_a.s
…
; Setup IRQ handler
ldr r0,=HandleIRQ ;This routine is needed
;ldr r1,=IsrIRQ ;if there isn't 'subs pc,lr,#4' at 0x18, 0x1c
ldr r1, =OS_CPU_IRQ_ISR ;modify by txf, for ucos
str r1,[r0]
5.第二个关键点是需要是个时钟基准作为UCOS-II的时钟,这里使用S3C2440 的定时器0作为时钟基准。
#include “config.h”
U8 IntCnt;
void Timer0_ISR(void)
{
rSRCPND =rSRCPND|( 1 << 10);
rINTPND = rINTPND;
IntCnt++;
OSTimeTick();
}
void Timer0Init(void)
{
// 定时器设置
rTCON = rTCON & (~0xf) ; // clear manual update bit, stop Timer0
rTCFG0 &= 0xffffff00; // set Timer 0&1 prescaler 0
rTCFG0 |= 15; //prescaler = 15+1
rTCFG1 &= 0xfffffff0; // set Timer 0 MUX 1/4
rTCFG1 |= 0x00000001; // set Timer 0 MUX 1/4
rTCNTB0 = (PCLK / (4 *15* OS_TICKS_PER_SEC)) - 1
rTCON = rTCON & (~0xf) |0x02; // updata
rTCON = rTCON & (~0xf) |0x09; // star
}
extern void OSTickISR(void);
void ISRInit(void)
{
// 设置中断控制器
rPRIORITY = 0x00000000; // 使用默认的固定的优先级
rINTMOD = 0x00000000; // 所有中断均为IRQ中断
pISR_TIMER0= (uint32) OSTickISR;
rINTMSK &= ~(1<<10); // 打开TIMER0中断允许
IntCnt=0;
}
6.编写主函数,添加任务等
编译链接源程序
1.出现如下错误,该错误是因为没有字节对齐引起的,在Os_cpu_a.s中添加语句PRESERVE8即可解决
烧写、调试
1.经过编译处理,已经没有错误,将代码烧写到开发板后,发现程序一进中断就崩溃。这是因为__irq关键字的缘故,Os_cpu_a.s包换有中断现场保护的代码,不需要编译器自动生成,所以所有中断服务程序需要去掉__irq关键字。
2.修改之后系统可以成功进行任务调度了。但是系统统计任务的占用率始终为0。检查源代码发现官方手册中给定的是1秒执行一次统计任务,而该源代码中是1秒执行十次。修改后占用率显示正常。
博客同款例程
https://download.csdn.net/download/weixin_41551104/13143363