CooCox CoOS在LPC1114上的移植
本帖最后由 yuanpooo 于 2014-5-22 08:56 编辑关于CooCox CoOS的详细介绍请看这里
在此截取一段如下:
CooCox CoOS 是一款针对ARM Cortex-M系列芯片而设计的实时系统内核。
CoOS特征:
免费并开源
ARM Cortex M3及M0定制操作系统
高度可裁剪性,最小系统内核仅974Byte
支持优先级抢占和时间片轮转
自适应任务调度算法
中断延时时间趋近于零
堆栈溢出检测
信号量、邮箱、队列、事件标志、互斥等同步通信方式
支持多种编译器:ICCARM、ARMCC、GCC
CoOS是专门针对Cortex-M(目前只发现M0和M3)系列芯片的一个嵌入式实时操作系统,所以在Cortex-M系列芯片上的移植非常简单。其中有些接口和数据类型宏定义和uCOS的长得有点像,所以熟悉uCOS的童鞋看见它估计会觉得有点儿亲切。。。估计也会觉得有点别扭,关于其性能介绍,上面的网址里面有详细介绍。
Ok,说下硬件平台,前段时间花了28大洋在周立功X宝店买了个TinyM0,现在竟然发现还有东西送!!(我买的时候没有!坑爹的周立功~~{:2_30:} )。不过。。。吃了一个月的尘,看着有点对不起。。。。这28大洋。So,今天打算搞搞它。
开始移植前,要准备两个东西:一,一个能动起来的LPC1114裸跑例程,例程里不能修改SysTick的配置和Reload寄存器的值;二,CoOS的最新版源码。
裸跑例程我这里用的是一个GPIO例程,是操作TinyM0上的唯一一个LED闪烁的例程,不过用到了SysTick做延时。。。。。后面会删掉。
CoOS的源码,目前是1.1.5版,其结构如下:
Kernel里面是内核C和H文件,portable里面针对三大IDE的移植文件,这里我用的是KeilMDK
OK,开始正题。
一,将CoOS文件添加到例程中,直接将整个CoOS文件夹拖到工程文件,注意看图片中的文件路径,我的工程文件夹名为“LPC1114_T2_CoOS”
二,在Keil中的project面板中增加一个CoOS文件夹,专用于添加CoOS的文件,接着就将刚刚提到的Kernel文件中的所有.C文件,portable中的“arch.c”及portable\Keil中的"port.c"添加到keil工程的CoOS文件夹。然后将头文件路径添加到工程选项中:
图中,看左边的project面板,就是刚添加的系统源码,然后红框是需要添加的头文件目录。
三,上面已经把需要的加的文件和目录都加了,现在就可以开始写main函数了。也很简单,只需调用两个接口:一,初始化系统;二,启动系统。看代码如下
#include "user_cfg.h"
#include "user_inc.h"
#include <CoOS.h>
#define LED P2(7)
void LED_Init(void)
{
//使能GPIO时钟
SCM_AHBPeriphClkCtrl(SCM_AHBPeriph_GPIO, ENABLE);
//配置LED引脚为GPIO管脚功能
LPC_IOCON->PIO2_7 &= ~0x07;
//配置为输出
LPC_GPIO2->DIR |= 1<<7;
}
OS_STK taskA_stk;
void taskA(void *pParam)
{
LED_Init();
LPC_GPIO2->DATA = 0x00;
while (1)
{
LED = 0xff;
CoTickDelay (50);
LED = 0x00;
CoTickDelay (50);
}
}
int main(void)
{
//初始化CoOS,内部会配置SysTick
CoInitOS ( );
CoCreateTask (taskA,0,0,&taskA_stk,128);
CoStartOS ( );
}
这里我也顺便创建了一个任务做测试。
好了,编译,下载,代码在TinyM0上调试通过。下面放工程
占沙发先,编辑中。。。 谢谢分享,学习
页:
[1]