SW.rar(工程源文件)
某日懒猫在网上突然看到CooCox CoOS这个实时系统内核,我承认我很好奇,我承认我很手痒,于是忍不住顺藤摸瓜,找到了它的网址http://www.coocox.org/CN/Index.html,看了下手册,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)
#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”所以的文件夹,其设置如下图所示:
再一个就是懒猫用的是CooCox Debugger,所以如果要用其它仿真器请注意相应选项的修改。
好了,最后还是吼一下懒猫的口号吧:每天进步一点点,开心多一点^_^
文章评论(0条评论)
登录后参与讨论