最新日志

发表于:2008-4-20 13:54:21
标签:μC/OS-II  AT89C51  移植  

0

μC/OS-II在AT89C51上的移植

 

引 言:

  μC/OS-II作为一个嵌入式实时操作系统,自1992年以来,因其源代码的完全公开和优越性能,已为众多的爱好者和开发人员所了解并得到了广泛应用。μC/OS-II是一个占先式内核,执行时间可确定(即函数的调用与服务的时间是可知的,不依赖于应用程序的大小),目前最多支持64个任务(8个为系统保留),总是执行处于就绪态的优先级最高的任务。目前,51系列及其扩展型单片机仍在单片机应用系统占较大比重,因而详细介绍μC/OS-II在AT89C51上的移植实现过程,解决移植过程中出现的问题,有很大的实用意义。

  1 KEIL C51编译器中函数再入栈的处理

  (1)再入函数与再入栈

  再入函数可以被递归调用,可同时被两个或多个进程调用。再入函数经常在实时应用或在中断和非中断必须共用一个函数的情况下被使用。编译时,在存储器模式的基础上为再入函数在内部或外部存储器中建立一个模拟堆栈区,称为再入栈,又可叫仿真堆栈,其增长方向是从上到下。

  (2)具体实现过程

  μC/OS-II是一个占先式内核,使用了较多的再入函数,用户只有通过C编译器来产生可再入代码。不同的编译器,对再入函数的仿真堆栈的处理不一样,如TC可以自动处理;而在单片机系统中应用较广的KEIL C51编译器中,要在startup.a51中进行设置。KEIL C51中,再入函数的返回地址保存在8051的硬件堆栈中,形参和局部变量必须保存在仿真堆栈中。在SMALL模式下,仿真栈与硬件堆栈分享共同的存储区,堆栈增长方向相反。而典型的51单片机真正的RAM只有128个字节,还有部分要用于位寻址区和工作寄存器,可用作仿真栈的空间有限。在这种方式下移植后,在中断嵌套或任务调用时系统会崩溃。因而,可以使用LARGE模式编译,这样,仿真栈就位于XDATA区,有充分的存储空间。编译前,要先在startup.a51中修改设置。XBPSTACK=1,XBPSTACKTOP设为仿真栈的最高地址加1(对于64KB外RAM,最高为0FFFFH,也可以保留部分地址用于外部I/O接口)。

  2 时钟节拍初始化

  时钟节拍是μC/OS-II运行的基础,其原理就是利用定时器中断,每隔一个时钟节拍中断一次,在发生中断时,内核判断是否进行任务切换或者别的操作。节拍率一般在10~100次之间,越高则系统的额外负荷就越重。可以使用AT89C51的定时器T0中断来实现。

void TimerInitiate(unsigned char Crystal,unsigned char Frequence)
{ //Crystal 晶振 Frenquence 时钟节拍率
unsigned long temporary="0";
temporary=1000000/(12*Frequence);
temporary=65535-Crystal*temporary;
TMOD=(TMOD & 0XF0) | 0X01; /* Timer 0工作在方式1*/
TL0=(unsigned char )temporary ;
TH0=(unsigned char )(temporary>>8);
TR0=1;
ET0=1;
}

  初始化定时器中断必须紧跟在多任务系统启动之后,一般放在第一个任务中。

  在Keil C51编译器中,代码优化级别设为9级,编译后,本程序占用的RAM和ROM空间约为:DATA 67.1 XDATA 732 CODE 8113 (字节)。基本上要使用外部的数据和程序存储器。

  在存储器容量许可的条件下,可以加入更多μC/OS-II提供的系统功能,如邮箱、消息序列等。

  

  μC/OS-II以其良好的稳定性与可靠性、实用的系统服务和完全公开的源代码,推动了实时操作系统的应用,也使应用系统的功能更加完善。

点击此处查看原文 >>

系统分类: 软件开发   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(200)
发表于:2008-4-20 13:33:55
标签:uCOS  II  

0

uCOS-II移植

1、和处理器相关的文件
       OS_CPU.H    ,       OS_CPU_A.ASM     ,OS_CPU_C.C
2、移植的第一步
       OS_CPU.H   中包括了#define 语句定义的、与处理器相关的常数、宏以及类型的移植。
3、移植的第二步
       OS_CPU_C.C 要求用户编写10个简单的C函数:
       OSTaskStkInit();
       OSTaskCreateHook();
       OSTaskDelHook();
       OSTaskSwHook();
       OSTaskIdleHook();
       OSTaskStatHook();
       OSTimeTickHook();
       OSInitHookBegin();
       OSInitHookEnd();
       OSTCBInitHook();
       唯一必要的函数是OSTaskStkInit(),其它9个函数必须声明,但并不一定要包含任何代码。
4、移植的第三步
       S_CPU_A.ASM要求用户编写4个简单的汇编语言函数:
       OSStartHighRdy();
       OSCtxSw();
       OSIntCtxSw();
       OSTickISR();
       如果编译器支持插入行汇编代码,就可以将所有与处理器相关的代码放到OS_CPU_C.C中,而不必要有单独的汇编语言文件。
5、测试移植代码
       可以通过下面的4个步骤测试移植代码(主要测试移植和cpu相关的添加的code)。
       第一步,确保C编译器、汇编器及连接器正常工作。
       第二步,验证OSTaskStkInit()和OSStartHighRdy()函数。
       第三步,验证OSCtxSw()函数。
       第四步,验证OSIntCtxSw()和OSTickISR()函数。

点击此处查看原文 >>

系统分类: 软件开发   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(87)
发表于:2008-4-11 12:25:00
标签:CAN  特点  

0

CAN总线特点

CAN总线有以下特点:
   1)CAN可以是对等结构,即多主机工作方式,网络上任意一个节点可以在任意时刻主动地向 网络上其它节点发送信息,不分主从,通讯方式灵活。
   2)CAN网络上的节点可以分为不同的优先级,满足不同的实时需要。
   3)CAN采用非破坏性仲裁技术,当两个节点同时向网络上传送信息时,优先级低的节点自动 停止发送,在网络负载很重的情况下不会出现网络瘫痪。
   4)CAN可以点对点、点对多点、点对网络的方式发送和接收数据,通讯距离最远10 km(5 kb/ s),节点数目可达110个。
   5)CAN采用的是短帧结构,每一帧的有效字节数为8个,具有CRC校验和其它检测措施,数据出错几率小。CAN节点在错误严重的情况下,具有自动关闭功能,不会影响总线上其它节点操作。
   6)通讯介质采用廉价的双绞线,无特殊要求,用户接口简单,容易构成用户系统。

点击此处查看原文 >>

系统分类: 汽车电子   |    用户分类:    |    来源: 原创

评论(1) | 阅读(188)
发表于:2008-4-11 12:23:27
标签:CAN总线  

0

什么是CAN总线?

    现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。CAN(Controller Area Network)属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通信网络。较之目前许多RS-485基于R线构建的分布式控制系统而言,  基于CAN总线的分布式控制系统在以下方面具有明显的优越性:
    首先,CAN控制器工作于多主方式,网络中的各节点都可根据总线访问优先权(取决于报文标识符)采用无损结构的逐位仲裁的方式竞争向总线发送数据,且CAN协议废除了站地址编码,而代之以对通信数据进行编码,这可使不同的节点同时接收到相同的数据,这些特点使得CAN总线构成的网络各节点之间的数据通信实时性强,并且容易构成冗余结构,提高系统的可靠性和系统的灵活性。而利用RS-485只能构成主从式结构系统,通信方式也只能以主站轮询的方式进行,系统的实时性、可靠性较差;
    其次,CAN总线通过CAN控制器接口芯片82C250的两个输出端CANH和CANL与物理总线相连,而CANH端的状态只能是高电平或悬浮状态,CANL端只能是低电平或悬浮状态。这就保证不会出现象在RS-485网络中,当系统有错误,出现多节点同时向总线发送数据时,导致总线呈现短路,从而损坏某些节点的现象。而且CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响,从而保证不会出现象在网络中,因个别节点出现问题,使得总线处于“死锁”状态。
    而且,CAN具有的完善的通信协议可由CAN控制器芯片及其接口芯片来实现,从而大大降低系统开发难度,缩短了开发周期,这些是只仅仅有电气协议的RS-485所无法比拟的。另外,与其它现场总线比较而言,CAN总线是具有通信速率高、容易实现、且性价比高等诸多特点的一种已形成国际标准的现场总线。这些也是目前 CAN总线应用于众多领域,具有强劲的市场竞争力的重要原因。
    CAN (Controller Area Network)即控制器局域网络,属于工业现场总线的范畴。与一般的通信总线相比,CAN总线的数据通信具有突出的可靠性、实时性和灵活性。由于其良好的性能及独特的设计,CAN总线越来越受到人们的重视。它在汽车领域上的应用是最广泛的,世界上一些著名的汽车制造厂商,如BENZ(奔驰)、BMW(宝马)、PORSCHE(保时捷)、ROLLS-ROYCE(劳斯莱斯)和JAGUAR(美洲豹)等都采用了CAN总线来实现汽车内部控制系统与各检测和执行机构间的数据通信。同时,由于CAN总线本身的特点,其应用范围目前已不再局限于汽车行业,而向自动控制、航空航天、航海、过程工业、机械工业、纺织机械、农用机械、机器人、数控机床、医疗器械及传感器等领域发展。CAN已经形成国际标准,并已被公认为几种最有前途的现场总线之一。其典型的应用协议有: SAE J1939/ISO11783、CANOpen、CANaerospace、DeviceNet、NMEA 2000等。

点击此处查看原文 >>

系统分类: 汽车电子   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(195)
总共 , 当前 /