首页 > 代码库 > TRTOS嵌入式操作系统二次开发使用说明
TRTOS嵌入式操作系统二次开发使用说明
TRTOS
使
用
说
明
一、系统添加设备修改参数说明
1、Tos系统参数设置(文件位置 Tos/Configs/Define.h)
2、设备的添加和挂载
设备统一读写接口函数类型typedef void (*DeviceWRFunc)(void *Addr,void*Data,void *Length);
设备的挂载接口
在写好的外部设备驱动后如果该设备属于独占操作的需要添加到设备管理序列,以便通过系统内部的设备管理功能协调各任务轮流使用
3、Tos的Main入口执行顺序
对已经写好的的外部驱动设备,需要在DeviceList_Init();和Device_Init();之间进行挂载
注意:每个任务总共使用的堆栈大小不得超过默认堆栈大小X任务个数
二、系统的使用
1、任务的创建
*任务的函数类型必须是typedef void (*Tos_Task)(void *)类型
*任务中必须要调用系统延时函数
创建一个最简单的任务
Led灯以600个系统周期循环闪烁
*类似于下类情况的或系统运行异常导致下类情况发生的,系统将会在20秒过后从新启动
*在任务调用设备时是不用考虑该设备是否被占用,系统会自行按照任务优先级安排任务去使用。
2、设备使用
在Tos操作系统中集成了设备管理功能。
在任务执行 BOOLTos_TaskGetDev(uint8 ID,uint32 Timeout)函数并传入设备Id时,当该设备处于空闲状态。该设备会被锁定,其他需要使用该设备的任务都进入休眠或等到超时状态,当该任务使用完设备后执行BOOL Tos_TaskDropDev(uint8 ID)函数并传入设备Id,该设备被释放,释放的同时,会激活正等候此设备的其他任务,在等候的所有任务中,优先级最高的会被首先激活。
3、调试工具的使用
在系统开发阶段都需要用到调试功能,使用前需要对调试工具进行初始化,一般可以在系统运行前执行DeBug_Init()函数,如果系统硬件既支持液晶显示屏又支持串口那样调试就可以分别从液晶屏和串口输出。
调试信息管道:如果某个任务在调试的时候是处于独占调试工具的时候可以执行DeBug_Get()函数,系统的调试功能只会显示该当前任务调试信息,结束独占执行DeBug_Drop();
控制抑制调试输出:在支持多调试输出的情况下可以对输出通道进行选择。如只通过串口打输出或只通过液晶屏输出抑或不输出,void DeBug_OutSet(uint8 OutSet);OutSet的值填DeBug_LCD|DeBug_USART即选择两种输出为0是不输出,为0xff是选择全部输出。
选择输出调试消息内容:在调用DeBug(…..)调试接口时,在最后一个参数既为消息类型。
消息内容有如下几种
在执行DeBug_SetType(Infor_Infor);后,调试输出的消息中只显示Infor_Infor类型的消息。
4、消息队列的使用
消息接收方创建消息队列实体
发送消息方创建消息实体,并且把消息实体的地址填到接收方的消息队列消息地址中,
接收方再还原出消息内容。
5、邮箱的使用
邮箱的使用很简单,只是把32位的数据内容传送到对方邮箱地址中,传送的是数据还是地址由使用着决定。
三、自带驱动使用介绍
1、内部flash读写驱动
读取数据和保存数据到单片机内部的flash中
2、触摸屏驱动
如下几个动作是在触摸屏时间出发前后发生的,用户可以根据在接口内填充自定义的处理事件。
/*************************************************************
Func: 松开动作事件
Date: 2014 端午节
Note: 测试
*************************************************************/
void Touch_UpIngEvent()
{
if(Touch_Event.UpIng_Event)//判断是否存在处理任务
{
DeBug("TOUCH_EVENT_UPING",Infor_Infor);
Touch_Event.UpIng_Event=Null;//任务单次激发
}
}
/*************************************************************
Func: 按下动作事件
Date: 2014 端午节
Note: 测试
*************************************************************/
void Touch_DownIngEvent()
{
if(Touch_Event.DownIng_Event)
{
DeBug("TOUCH_EVENT_DOWNING",Infor_Infor);
Touch_Event.DownIng_Event=Null;
}
}
/*************************************************************
Func: 松开超时事件
Date: 2014 端午节
Note: 测试
*************************************************************/
void Touch_UpDelayEvent()
{
if(Touch_Event.Up_Event)
{
DeBug("TOUCH_EVENT_UP",Infor_Infor);
Touch_Event.Up_Event=Null;
}
}
/*************************************************************
Func: 按下超时事件
Date: 2014 端午节
Note: 测试
*************************************************************/
void Touch_DownDelayEvent()
{
if(Touch_Event.Down_Event)
{
DeBug("TOUCH_EVENT_DOWN",Infor_Infor);
Touch_Event.Down_Event=Null;
}
}
触摸屏监视任务void Task_GetTouch(void *Tags);
触摸屏校准函数,数据正确则不校准void TouchScreen_Correct();
3、ModBus协议介绍
总线控制
波特率19200; 数据位8位;停止位1位;奇偶校验位无;
主机始终是系统中通讯的发起者,其他外围设备始终作为从机使用,被动响应主机命令。
主机和外围设备只有在有数据发送时才置于发送状态,其余为接收状态;
主机发送广播指令时,外围设备不发送反馈消息;
主机指定目的地址情况下,被指定的外围设备在接收到指令后5毫秒后500毫秒内响应。
主机在发出指令后500毫秒内没有收到反馈认为该指令发送失败并重发,重发3次
地址分配
最多设备数250个,最大可分配249个地址给丛机设备使用,主机始终使用0x01,
广播使用0xff,且只有主机拥有广播权限
协议组成
协议分析
主机消息组成
第一层协议不包含数据段里面的数据内容
名称 | 起始标识 | 接收方地址 | 本地地址 | 消息帧标识 | 流水号 | 消息长度 | 数据 | 校验 | 结束码 |
长度 | 1 | 1 | 1 | 1 | 1 | 2 | n+3 | 2&1 | 1 |
例如 | 0x7e | 0x78 | 0x01 | 0x01 | 0x15 | 0x000n+3 |
|
| 0x7f |
第二层协议只包含数据的内容结构信息
名称 | 数据标识 | 数据长度 | 数据段数据 |
长度 | 1 | 2 | 0xn |
例如 | 0x01 | 0x000n | 。。。。。。。 |
例如.同步时间(2014/08/13 05:23:03)的数据帧
7E FF 01 02 01 00 0B 01 00 0820 14 08 13 19 05 23 03 92 7F
校验.校验方式可以选择Crc校验,也可以选择异或校验。
ModBus驱动文件接口使用
发送:
MB ModBusMsg;//创建协议实例
ModBus_Create(&ModBusMsg,0x01,0x94,CheakMode_Xor);//初始化实例
x=ModBus_CreateMsg(&USART1_TX_Buffer[0],&ModBusMsg,0x01,0x01,0x01,&Buf[0],LCD_YSIZE*2);//生成报文
USART1_DMAWriteDatas(&USART1_TX_Buffer[0],x);//使用报文
接收: