Chinaunix首页 | 论坛 | 博客
  • 博客访问: 110413
  • 博文数量: 23
  • 博客积分: 245
  • 博客等级: 二等列兵
  • 技术积分: 200
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-11 17:18
文章分类

全部博文(23)

文章存档

2016年(3)

2013年(16)

2012年(4)

我的朋友

分类: 嵌入式

2013-05-03 08:38:11

uC/OS-ViewMicrium开发的一个基于uC/OS-II的中间件监控程序,它同运行在Windows平台上的客户端程序“Viewer”通过串口配合,可以实时显示uC/OS-II及其所有任务的当前状态,例如任务栈起始地址,栈大小,任务名称,任务当前状态,任务被执行次数和CPU占用率等等。用户还可以修改内存指定地址的内容,向特定任务发送简单数据,简单控制uC/OS-II的运行,例如暂时终止时间片中断。在2006Micrium终止了uC/OS-View的开发,版本永远停留在了V1.33。它需要uC/OS-II V2.70以上,但也不能太高,因为自V2.90开始任务名称从RAM被移植到了ROM中,需要对uC/OS-View进行相应的修改,所以对于uC/OS-View V1.33最合适的uC/OS-II版本是V2.86uC/OS-View的继任者是uC/Probe,这是一个功能极其强大的监控、调试程序,它甚至可以脱离uC/OS-II环境。


虽然uC/OS-View已经被Micrium无情抛弃了,但其设计思路还是很值得学习的,对我们今后分析、设计相似系统是很有帮助的。uC/OS-View的用户手册中已经详细讲解了移植过程和“Viewer”的使用方法,这里来讲讲手册中未涉及到的一些内容。


1.通信的帧结构


首先约定,运行在uC/OS-II之上的uC/OS-View称为下位机,运行在PC上的Viewer为上位机。


上、下位机之间的通讯采用“询问-应答”方式,即上位机发起询问,下位机根据收到的指令做出相应的动作,并且决定是否需要回发应答。通讯采用帧形式,上下行通讯帧格式定义如下:


























帧头1


帧头2


长度


命令/数据


校验和


帧尾


0xED


0x8C


Len


CMD/Data


Sum


0x8D


1 byte


1 byte


1 byte


0-255 bytes


1 byte


1 byte


下行帧(上位机至下位机)


























帧头1


帧头2


长度


命令/数据


校验和


帧尾


0x8C


0xED


Len


CMD/Data


Sum


0x8D


1 byte


1 byte


1 byte


0-255 bytes


1 byte


1 byte


上行帧(下位机至上位机)



起始的2字节为帧头,接下来是1字节的长度段,指示出数据段和校验和的总长度,这里也决定了一次最多允许传送255字节用户数据。随后是校验和和帧尾,各1字节。下行帧校验和是长度段和所有数据的二进制和(8位无符号)的补码,即:


Sum = (unsigned
int)((Len+Data[0-Len])&0xFF)


行帧校验和是长度段和所有数据的二进制和(8位无符号),即:


Sum = (unsigned
int)((Len+Data[0-Len])&0xFF)



2解析命令


下位机接收数据帧时采用“状态机”法,也就是每收到1字节数据后,结合帧结构判断当前数据是否合法,并根据当前状态决定下一状态,直到收到正确帧尾。


当正确收到一帧数据后,就可以分析数据段里面包含的命令了。uC/OS-View预定义了一系列命令,命令字在数据段的第一个字节表示,见下表:



















































































命令


下行数据包


字节数


上行数据包


字节数


向下位机发送1字节数据(命令`C`)


0xED


0x8C


0x02


0x43(C)


0xData


0xSum


0x8D


1


1


1


1


1


1


1




系统信息 (命令`s`)


0xED


0x8C


0x01


0x73(s)


0x8C


0x8D


1


1


1


1


1


1


0x8C


0xED


0x33


0x73(s)


OSTime


OSTCBCur


OS_Version


1


CPU Name


IntStkBase


IntStkSize


Sum


0x8D


1


1


1


1


4


4


2


1


30


4


4


1


1


任务信息 (命令`t`)


0xED


0x8C


0x05


0x74(t)


Task ID


Sum


0x8D


1


1


1


1


4


1


1


0x8C


0xED


Len


0x74(t)


OSViewCydesCtr


.OSTCBTaskName[]


.OSTCBTaskPrio


.OSTCBStat


.OSTCBEventPtr


.OSTCBDly


.OSTCBCyclesTot


.OSTCBCtxSwCtr


.OSTCBStkBase


.OSTCBStkSize*sizeof(OS_STK)


Sum


0x8D


1


1


1


1


4


OS_TASK_NAME_SIZE-1


1


1


4


4


4


4


4


4


1


1


任务列表 (命令`l`)


0xED


0x8C


0x01


0x6C(l)


0x93


0x8D


1


1


1


1


1


1


0x8C


0xED


Len


0x6C


OSTCBPrioTbl[0]


OSTCBPrioTbl[1]



OSTCBPrioTbl[N]


Sum


0x8D


1


1


1


1


4


4



4


1


1


单步 (命令`S`)


0xED


0x8C


0x02


0x53(S)


Data


Sum


0x8D


1


1


1


1


1


1


1


0x8C


0xED


0x01


0x53(S)


0x54


0x8D


1


1


1


1


1


1


跟踪 (命令`T`)


0xED


0x8C


0x01


0x54(T)


0xAB


0x8D


1


1


1


1


1


1


命令未实现



8bit数据 (命令`b`)


0xED


0x8C


0x06


0x62(b)


Addr


N


Sum


0x8D


1


1


1


1


4


1


1


1


0x8C


0xED


N


0x62(b)


8bit
Value@Addr+0


8bit
Value@Addr+1



8bit
Value@Addr+N-1


Sum


0x8D


1


1


1


1


1


1



1


1


1


16bit数据 (命令`w`)


0xED


0x8C


0x06


0x77(w)


Addr


N


Sum


0x8D


1


1


1


1


4


1


1


1


0x8C


0xED


N*2


0x77(w)


16bit
Value@Addr+0


16bit
Value@Addr+1



16bit
Value@Addr+N-1


Sum


0x8D


1


1


1


1


2


2



2


1


1


32bit数据 (命令0x00)


0xED


0x8C


0x06


0x00


Addr


N


Sum


0x8D


1


1


1


1


4


1


1


1


0x8C


0xED


N*4


0x00


32bit
Value@Addr+0


32bit
Value@Addr+1



32bit
Value@Addr+N-1


Sum


0x8D


1


1


1


1


4


4



4


1


1


18bit数据 (命令`1`)


0xED


0x8C


0x06


0x31(1)


Addr


Value


Sum


0x8D


1


1


1


1


4


1


1


1


0x8C


0xED


0x01


0x31(1)


0x32


0x8D


1


1


1


1


1


1


116bit数据 (命令`2`)


0xED


0x8C


0x07


0x32(2)


Addr


Value


Sum


0x8D


1


1


1


1


4


2


1


1


0x8C


0xED


0x01


0x32(2)


0x32


0x8D


1


1


1


1


1


1


132bit数据 (命令`4`)


0xED


0x8C


0x09


0x34(4)


Addr


Value


Sum


0x8D


1


1


1


1


4


4


1


1


0x8C


0xED


0x01


0x34(4)


0x32


0x8D


1


1


1


1


1


1



3.移植实例


移植的uC/OS-II版本号为2.86uC/OS-View1.33,编译环境为WinAVR-20100110


硬件平台是一个ATmega644最小系统。一个用来显示多任务运行情况的LED接到PB1利用644UART来连接到PC644外部晶振14.7456MHz,系统Timetick设置为10ms



所有源程序及Viewer连接如下:



原文地址:http://blog.sina.com.cn/s/blog_a2c5f56e0101als3.html

阅读(1706) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~