yuanpooo 发表于 2014-5-22 08:35:41

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上调试通过。下面放工程




yuanpooo 发表于 2014-5-22 08:35:42

占沙发先,编辑中。。。

finenesszhang 发表于 2017-3-13 18:58:31

谢谢分享,学习
页: [1]
查看完整版本: CooCox CoOS在LPC1114上的移植