老古开发网首页
导航:老古开发网首页文章索引索引第76页文章分类经验总结第1页→[μC/OS-Ⅱ在C167CR单片机上的移植]
| -文章搜索 - 最新文章 - |

第17184篇:μC/OS-Ⅱ在C167CR单片机上的移植

发布时间:2002年9月9日 点击次数:643
来源:   作者:赵方庚 姜丁 朱先民 赵慧敏
 

  随着嵌入式系统应用的日益广泛,RTOS越来越受到嵌入式系统开发人员的青睐,特别是进入20世纪90年代后,RTOS更是逐步确立了在嵌入式系统设计中的主导地位。使用RTOS所带来的最大好处是可提高嵌入式系统的可靠性,同时也提高了软件的开发效率,缩短了开发周期。由于商业化RTOS软件较高的价格和使用成本(版权费、维护费等)的限制,RTOS在国内的应用并不普遍。

  μC/OS-II是一个著名的源码免费的嵌入式RTOS,具有源码公开、可移植、可固化、可裁减、稳定性和可靠性高的特点。μC/OS-II是基于优先级的占先式(Preemptive)实时多任务内核,最多可支持64个任务(其中系统保留8个自用)。由于μC/OS-II是为嵌入式应用编写的通用软件,故在具体应用时需根据不同单片机的特点进行移植。μC/OS-II的大部分代码是用ANSI C编写的,只有与处理器相关的一部分代码用汇编语言编写,所以具有很强的可移植性,可以在大多数8位、16位、32位单片机及数字信号处理器上运行。本文介绍μC/OS-II在Infineon C167CR单片机上的移植技术。

1  Infineon C167CR单片机简介

  C167CR单片机是Infineon公司80C166系列单片机中的一款高性能16位微处理器,其最高时钟频率可达25 MHz,片内ROM最多达128K,寻址能力16M。C167CR单片机集成度高,具有丰富的片内资源:111个I/O引脚、16级56个中断、32个捕捉/比较通道、16个A/D转换通道、4个PMW通道、两组通用定时器单元、8通道外围事件控制器、同步/异步串行接口和高速同步串行接口、CAN模块等。C167CR单片机的内部资源及其C编译器满足μC/OS-II的移植条件。

2  μC/OS-II在C167CR单片机上的移植

  在μC/OS-II的移植中需要修改五个文件:主头文件INCLUDES.H、系统配置文件OS_CFG.H以及与CPU相关的三个文件(OS_CPU.H、OS_CPU_A.ASM以及OS_CPU_C.C)。移植中使用的编译器是Keil公司的Keil C166编译器。五个文件具体内容请见本刊网络补充版(http://www.dpj.com.cn)。

3  移植示例

  示例中,共创建了二个任务,其中发送任务SenderTask()以发送消息的形式连续地向发送邮箱中传送0~9这10个数,当收到接收邮箱的消息之后,就开始发送下一个数字;接收任务ReceiverTask()从发送邮箱中取出数字,从P2口输出,再延时5 s,而后向接收信箱回送消息。程序清单如下:

#include "includes.h""
#define TASK_STK_SIZE 512 /*任务堆栈为1KB*/
#define N_TASKS 2 /*任务数*/
OS_STK TaskStk[N_TASKS][TASK_STK_SIZE];/*任务堆栈*/
OS_EVENT pReceiverMailBox; /*接收邮箱*/
OS_EVENT pSenderMailBox; /*发送邮箱*/
void ReceiverTask(void *data);
void SenderTask(void *data);
/*主程序*/
void main (void){
  DP2 = 0xffff; /*设置P2口为输出*/
  OSInit(); /*系统初始化*/
  pReceiverMailBox = OSMboxCreate((void*)0);/*创建接收邮箱*/
  pSenderMailBox = OSMboxCreate((void*)0);/*创建发送邮箱*/
  OSTaskCreate(ReceiverTask, (void *)0, (void *)&TaskStk[0][TASK_STK_SIZE - 1], 3); /*创建接收任务*/
  OSTaskCreate(SenderTask, (void *)0, (void *)&TaskStk[1][TASK_STK_SIZE - 1], 4); /*创建发送任务*/
  OSStart(); /*启动系统*/
}
/*发送任务*/
void SenderTask (void *data){
  INT8U count = 0;
  INT8U error;
  data = data;
  while (1){
  for (count=0;count<10;count++){
  OSMboxPost(pSenderMailBox, (void*)&count);
  OSMboxPend(pReceiverMailBox, 0, &error);
  }
  }
}
/*接收任务*/
void ReceiverTask (void *data){
  INT8U *count;
  INT8U error;
  data = data;
  OSTickISRInit();
  while (1) {
  count = (INT8U*)OSMboxPend(pSenderMailBox, 0, &error);
  P2 = *count;
  OSTimeDlyHMSM(0, 0, 5, 0);
  OSMboxPost(pReceiverMailBox, (void*)1);
  }
}


欢迎进入老古论坛进行讨论
[经验总结] 相关文章:
嵌入式系统中FFT算法研究
简介:
摘要 首先分析实数FFT算法的推导过程,然后给出一种具体实现FFT算法的C语言程序,可以直接应用于需要FFT运算的单片机或DSP等嵌入式系统中。 关键词 嵌入式系统 FFT算法 单片机 DSP   目前国内有关数字信号处理的教材在讲解快速傅里叶变换(FFT)时,都是以复数FFT为重点,实数FFT算法都是一笔带过,书中给出的具体实现程序多为BASIC或FORTRAN程序并且多数不能真正运行。鉴于目前在许多嵌入式系统中要用到FFT运算,如以DSP为核心的交流采样系统、频谱分析、......
 
下一个:[新闻热点]科银京成公司嵌入式操作系统及开发环境通过权威测试机构测试
简介:
2002年7月27日讯,中国船舶工业软件测试中心对北京科银京成技术有限公司自主版权的嵌入式实时操作系统及其开发环境进行的测试于近日完成。此次测试的内容包括:嵌入式实时多任务操作系统-DeltaOS,嵌入式软件开发工具-LambdaTOOL、嵌入式图形界面系统-DeltaGUI。测试过程历时5个多月,编写和使用了上千个测试用例和几万行测试程序。 20......

上一个:[嵌入式系统]I²C器件接口IP核的CPLD设计

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:30分钟 执行时间:31毫秒