ARM Cortex-M3核LPC1768的μCOS-II的移植练习-1

时间:2020-12-03 20:07:13

摘要:

移植步骤参考文章 LPC17XX 学习之 uCOS-II 移植实例》(简称《实例》)。对移植过程中遇到的几个细节问题进行总结,形成文档备份。由于是初次接触操作系统移植,可能会有一些错误认识或操作,敬请指正。

 

1概述

《实例》文档详细讲述了μCOS-II(V2.89)向LPC17xx系列CPU移植的过程。本文是对上文档的过程细化,即在向LPC1768移植过程中遇到的一些细节性问题,进行补充性描述。另外《实例》文档移植的只是一个系统的外壳,并没有附加任何功能,即当下载到CPU内部运行,没有任何运行效果。本文增加了LED指示灯的指示闪烁,当LED指示灯按照预想的功能闪烁时,则表示操作系统移植成功。

本文使用的LPC1768开发代码来源于周立功的开发板。

 

2内核源码来源

μCOS-II(V2.89)的系统源代码,可以从Micrium官网下载开发套件Micrium-NXP-uCOS-II-LPC1768-SK(http://download.csdn.net/detail/ldu0323/9850901)。该套件中包含了详细的系统源码以及开发文档指南。如下图示

ARM Cortex-M3核LPC1768的μCOS-II的移植练习-1

ARM Cortex-M3核LPC1768的μCOS-II的移植练习-1

Micrium-NXP-uCOS-II-LPC1768-SK\Micrium\AppNotes\AN1xxx-RTOS\AN1080-uCOS-II-NXP-LPC-1768-SK文件夹存放的是应用开发文档AN-1080:

《μC/OS-II μC/Probe and the NXP LPC17xx Processors on the IAR LPC1768-SKdevelopment Board Application Note》

 

Micrium-NXP-uCOS-II-LPC1768-SK\Micrium\Software\uCOS-II\Ports\ARM-Cortex-M3\Generic\IAR文件夹下存放的是与CPU有关的文件,包括4个文件,分别是os_cpu.h、os_cpu_c.c、os_cpu_a.asm以及os_dbg.c。

 

Micrium-NXP-uCOS-II-LPC1768-SK\Micrium\Software\uCOS-II\Source文件夹下存放的是μCOS-II(V2.89)的源码文件,包含11个文件,分别是os_core.c、os_flag.c、os_mbox.c、os_mem.c、os_mutex.c、os_q.c、os_sem.c、os_task.c、os_time.c、os_tmr.c、ucos_ii.h

 

 

另外编译需要app_cfg.h和os_cfg.h文件,在套件中也能找到。

 

2硬件复位初始化

 

2.1startup_LPC17xx.s

起初我按照《实例》文档的步骤修改代码,编译通过,下载至芯片后,发现LPC1768的启动并不正常,CPU的时钟出现问题。后来我发现我使用的周立功的开发板的软件环境,可能与作者的开发环境有些许不同。

 

我的startup_LPC17xx.s文件来自于周立功的LPC1768的开发板,版本是V1.01(2009年12月21日),而《实例》中使用的是V1.0(2008年11月25日)。两个版本的文件区别主要在Reset_Handler的复位流程上不同。如果直接替换使用,虽然能够编译通过,但实际运行时CPU的时钟就出错了。

我的解决方法是在《实例》文中的V1.0版本基础上对Reset_Handler进行更改,更改后的Reset_Handler如下图所示。

ARM Cortex-M3核LPC1768的μCOS-II的移植练习-1

ARM Cortex-M3核LPC1768的μCOS-II的移植练习-1

2.2main函数

 

在hello.c的main()函数中需要在OSInit();之前增加对LPC1768时钟和硬件的初始化,时钟初始化,周立功开发板使用的是SystemInit()。若要LED闪烁,则在这里要加入GPIO引脚的初始化;要使用串口打印,则在这里要加入串口的初始化

 ARM Cortex-M3核LPC1768的μCOS-II的移植练习-1ARM Cortex-M3核LPC1768的μCOS-II的移植练习-1

 

3其他

 

uC-CPU组中删除文件os_dbg.c,即该文件不参与编译。

 

4keil工程文件

uCOS-II V2.89