电子大神的日记本,供应链专家的功夫茶盘,在这里记录、分享与共鸣。

登录以开始

四、在Cortex_M0上试用CooCox CoOS

SW.rar(工程源文件)

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

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

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

说一下这个移植过程,关于这个系统的剪裁配置主要在“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 management,events 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 management,Max 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)                                    

博主
xucun915@126.com
小野兽的小草窝
奋斗改变命运,梦想让人与众不同! QQ:515673876
点击跳转