原创 四、在Cortex_M0上试用CooCox CoOS

2011-6-24 18:32 8003 3 3 分类: MCU/ 嵌入式

rar.gifSW.rar(工程源文件)

某日懒猫在网上突然看到CooCox CoOS这个实时系统内核,我承认我很好奇,我承认我很手痒,于是忍不住顺藤摸瓜,找到了它的网址http://www.coocox.org/CN/Index.html,看了下手册,down了源代码,顺便拿出懒 猫的M0开发板,那还等什么开始动工吧。

哦,还是先简单说一下这个实时内核吧,据说它是专门为ARM Cortex_M系列芯片量身打造的实时系统,懒猫在它的网站上溜达了好长时间,发现它的说明文件很多,手册制作的很详细,所以感觉对初学者很有帮助。它的使用手册中给出了它的十大特征,这个懒猫就不在这里列举了,如果你感兴趣,可以到它的网站上转转,上面是它的链接。好了,还是开始正题吧。

学习移植嘛,当然就没有搞太复杂了,所以这次还是只有两个小任务,就是LED灯闪烁。先说一下这个测试电路,如下图所示:

http://upload.ednchina.com/Attachment.aspx?attachmentid=150160

说一下这个移植过程,关于这个系统的剪裁配置主要在“osconfig.h”这个文件中修改,这个源文件内容包括芯片的选择、最大任务数、堆栈大小、系统频率等。下面是该源代码的详细内容:

#ifndef __OSCONFIG_H__

#define __OSCONFIG_H__

/*-------------------------------------------------------------------------------

 * 定义芯片类型:

 * 1 -- cortex-m3

 * 2 -- cortex-m0

 * 注:如果是Cortex-M3需改成1

-------------------------------------------------------------------------------*/

#define CFG_CHIP_TYPE           (2)  

/*- 定义分配的最低优先级 -*/

#define CFG_LOWEST_PRIO         (64)

/*-

 * 运行的最大任务数

 * 测试阶段只有两个任务

-*/

#define CFG_MAX_USER_TASKS      (2)

/*- 空闲任务堆栈大小(word-*/

#define CFG_IDLE_STACK_SIZE     (25)

/*- 系统频率 -*/

#define CFG_CPU_FREQ            (72000000)

/*-

 * 系统节拍周期

 * 这里设置为1000HZ,对应为1ms

-*/

#define CFG_SYSTICK_FREQ        (1000)

/*- ISR中调用系统API的最大数 -*/

#define CFG_MAX_SERVICE_REQUEST (3)

/*-------------------------------------------------------------------------------

 * 调度算法选择

 * 1 -- 二进制调度算法

 * 0 -- 顺序列表调度

-------------------------------------------------------------------------------*/

#if (CFG_MAX_USER_TASKS) <15

#define CFG_ORDER_LIST_SCHEDULE_EN  (1)

#else

#define CFG_ORDER_LIST_SCHEDULE_EN  (0)

#endif

/*-------------------------------------------------------------------------------

 * 时间片轮询开关

 * 1 --

 * 0 --

-------------------------------------------------------------------------------*/

#define CFG_ROBIN_EN            (1)

/*-------------------------------------------------------------------------------

 * 默认任务片

 * Default slice of task.

-------------------------------------------------------------------------------*/

#if         CFG_ROBIN_EN > 0

#define CFG_TIME_SLICE          (10)                                      

#endif

/*-------------------------------------------------------------------------------

 * 调度模式配置

 * 1 -- 使能     0 -- 关闭

 * 使能或关闭所有的等待函数,包括信号量、邮箱、队列、事件标志、互斥量、延时模块

 * Schedule model Config

 * Enable(1) or disable(0) all waiting function.

 * Include sem,mailbox,queue,flag,mutex,delay modules.         

-------------------------------------------------------------------------------*/

#define CFG_TASK_WAITTING_EN     (1)

/*-------------------------------------------------------------------------------

 * 同步或静止调度模式

 * 如果是一个不变化的调度,当系统运行以后不能创建任务也不能更改任务的优先级。在同步

 * 调度模式中,以上功能都可以有。当任务结束时,如果系统是在静止调度模式,则系统不会

 * 删除任务源,所以你可以重新激活该任务。但是在同步模式下,任务源被彻底删除。如果是

 * 在静止任务调度模式下,互斥模块是不能用的,因为在这种模式下不支持更改任务的优先级 

 * Dynamic task scheduling(1) or Static Task Scheduling(0) model.

 * If in Static Task Scheduling model(0),cannot creat task and change task

 * priority after coocox os start running. In Dynamic Task Scheduling model(1),

 *  all these can. When task terminated, if in Static Task Scheduling model(0),

 * CoOS do not recovered task resources, and you can activate it again.

 * But in Dynamic Task Scheduling model(1),task resources will be recovered.

 * If in Static Task Scheduling model(0),mutex module can not be used, as this

 * model don't support to change task priority while CoOS running.

-------------------------------------------------------------------------------*/

#define CFG_TASK_SCHEDULE_EN     (1)

/*-----------------任务管理配置  Task Management Config------------------------*/

/*

 * 1-- Enable   0 -- disable

 * CoSetPriority() API.

*/

#if CFG_TASK_SCHEDULE_EN >0

#define CFG_PRIORITY_SET_EN       (1)           

#endif

 

/*

 * 1-- Enable   0 -- disable

 * CoAwakeTask() and CoSuspendTask() API.

*/

#define CFG_TASK_SUSPEND_EN       (1)

/*-------------------------------------------------------------------------------

 * 调试管理配置

 * Debug Management Config

 -------------------------------------------------------------------------------*/

/*

 * 1-- Enable   0 -- disable

 * 参数校验.

*/

#define CFG_PAR_CHECKOUT_EN     (1)             

 

/*

 * 1-- Enable   0 -- disable

 * 检验栈是否溢出.

*/

#define CFG_STK_CHECKOUT_EN     (1)             

 

/*-------------------------------------------------------------------------------

 * 内存管理配置

 * Memory Management Config

 -------------------------------------------------------------------------------*/

/*

 * 1-- Enable   0 -- disable

 * 内在管理.memory management

*/

#define CFG_MM_EN               (1)

 

/*

 * 最大内存数,不能超过32

 * Max number of memory.(must be less than 32

*/

#if CFG_MM_EN >0

#define CFG_MAX_MM              (2)                                     

#endif

 

/*-------------------------------------------------------------------------------

 * 内核堆栈管理配置

 * Kernel heap Management Config

 -------------------------------------------------------------------------------*/

/*

 * 1-- Enable   0 -- disable

 * 内核堆栈管理控制

 * kernel heap management

*/

#define CFG_KHEAP_EN            (1)

 

/*

 * 内核堆栈大小控制

 * Kernel heap size(word)

*/

#if CFG_KHEAP_EN >0

#define KHEAP_SIZE              (50)                                         

#endif

 

/*-------------------------------------------------------------------------------

 * 时间管理配置

 * Time Management Config

 -------------------------------------------------------------------------------*/

/*

 * 1-- Enable   0 -- disable

 * 硬件延时

 * TimeDelay() API

*/

#if CFG_TASK_WAITTING_EN >0

#define CFG_TIME_DELAY_EN       (1)              

#endif

 

/*-------------------------------------------------------------------------------

 * 定时器管理配置

 * Timer Management Config

 -------------------------------------------------------------------------------*/

/*

 * 1-- Enable   0 -- disable

 * 定时器管理

 * timer management

*/

#define CFG_TMR_EN              (1)             

 

/*

 * 指定的最大定时器数

 * Specify max number timer.(must be less than 32)

*/

#if CFG_TMR_EN >0

#define CFG_MAX_TMR             (2)                                       

#endif

 

/*-------------------------------------------------------------------------------

 * 事件管理配置

 * Event Management Config

 -------------------------------------------------------------------------------*/

/*

 * 1-- Enable   0 -- disable

 * 定时器管理,包括信号量,消息及队列

 * events managementevents including semaphore,mailbox,queue.

*/

#if CFG_TASK_WAITTING_EN > 0

#define  CFG_EVENT_EN           (1)

#endif

 

#if CFG_EVENT_EN > 0             // **CFG_EVENT_EN**

/*

 * (1)FIFO (2)PRI (3)FIFO+PRI

 * 事件类型

 * Event sort type

*/

#define CFG_EVENT_SORT          (3)             

 

/*

 * 最大事件数,最多为255

 * Max number of event.(must be less than 255)

 * Event = semaphore + mailbox + queue;

*/

#define CFG_MAX_EVENT           (10)

 

/*

 * Enable(1) or disable(0)

 * 信号量管理

 * semaphore management

*/

#define CFG_SEM_EN              (1)             

 

/*

 * Enable(1) or disable(0)

 * 消息管理

 * mailbox management

*/

#define CFG_MAILBOX_EN          (1)             

 

/*

 * Enable(1) or disable(0)

 * 队列管理

 * queue management

*/

#define CFG_QUEUE_EN            (1)             

 

/*

 * 最大队列娄

 * Max number of queue.(less than CFG_MAX_EVENT)

*/

#if         CFG_QUEUE_EN >0  

#define CFG_MAX_QUEUE           (2)                         

#endif   // CFG_QUEUE_EN

             

#endif   // **CFG_EVENT_EN**

             

/*-------------------------------------------------------------------------------

 * 事件标志管理配置

 * Flag Management Config

 -------------------------------------------------------------------------------*/

/*

 * Enable(1) or disable(0)

 * 标志管理

 * flag managementMax number of flag is 32

*/

#if CFG_TASK_WAITTING_EN > 0

#define  CFG_FLAG_EN           (1)

#endif

 

/*-------------------------------------------------------------------------------

 * 互斥管理配置

 * Mutex Management Config

 -------------------------------------------------------------------------------*/

/*

 * Enable(1) or disable(0)

 * 互斥管理

 * mutex management

*/

#if CFG_TASK_WAITTING_EN > 0

 

#if CFG_TASK_SCHEDULE_EN > 0

#define  CFG_MUTEX_EN           (1)

#endif

 

#endif

 

/*

 * 最大互斥量数目

 * Max number of mutex.(must be less than 255)

*/

#if CFG_MUTEX_EN >0

#define CFG_MAX_MUTEX           (10)                                    

#endif

 

/*-------------------------------------------------------------------------------

 * 系统公共管理配置

 * Utility Management Config

 -------------------------------------------------------------------------------*/

/*

 * Enable(1) or disable(0)

 * 系统公共管理

 * utility management

*/

#define CFG_UTILITY_EN          (1) 

 

#if CFG_UTILITY_EN >0               //***********

/*

 * Enable(1) or disable(0)

 * 系统节拍转换成时间控制

 * TickToTime() utility

*/

#define             CFG_TICK_TO_TIME_EN     (1)  

 

/*

 * Enable(1) or disable(0)

 * 时间转换成系统时钟节拍控制

 * TimeToTick() utility

*/

#define             CFG_TIME_TO_TICK_EN     (1)                

#endif                              //***********

 

#endif

源码中大部分懒猫已用中文注释了,如果哪位感兴趣可以看看,剪裁起来应该没有太大问题了,CPU板卡的配置在“system_LPC11xx.c”文件中,可以通过修改相应的宏定义来修改CPU板卡配置,例如:

/*----------------------------------------------------------------------------

  Define clocks

 *----------------------------------------------------------------------------*/

#define XTAL        (12000000UL)        /* Oscillator frequency               */

#define OSC_CLK     (      XTAL)        /* Main oscillator frequency          */

#define IRC_OSC     ( 4000000UL)        /* Internal RC oscillator frequency   */

#define WDT_OSC     (  250000UL)        /* WDT oscillator frequency           */

可以通过修改上面的宏定义来修改系统时钟,关于怎么配置,源代码中有详细说明,这里懒猫就不再重述。至于CooCox CoOS系统的一些知识,可以去前面给出的链接的网站去下载应用手册,也可以下载相应的例程。这里就先不说它的工作原理了,因为懒猫也是初次接触,所以很多东东暂时还没有理清-_-不过懒猫坚信,每天进步一点点,任何事情都不会太难!还要再说一点就是关于Keil MDK的设置问题,因中懒猫把这个工程的头文件放到了“inc”与“com”两个文件夹中,所以需先找到keil MDK—>optionàC/C++àinclude paths中将路径设置为“inc”与“com”所以的文件夹,其设置如下图所示:

20110624183100001.jpg

再一个就是懒猫用的是CooCox Debugger,所以如果要用其它仿真器请注意相应选项的修改。

好了,最后还是吼一下懒猫的口号吧:

每天进步一点点,开心多一点^_^

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条