一种工程机械控制器专用操作系统的设计与实现(2).pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:4 大小:196KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

一种工程机械控制器专用操作系统的设计与实现(2).pdf

一种工程机械控制器专用操作系统的设计与实现(2).pdf

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

万方数据繁穆蛳年11月一稗工毽壤壤攮鼷簇专咫攥作系统酶设诗与寞瑰(2)拳_蠢潺程机械胁棚柳删衙相眦删咖8湖南大学软件学院周继辉金敏本操作系统的任务问通信采用消息机制,一个任务可以向另一个任务(包括自已)发送一个字节长度的消息,值0表示无效消息,其余内容m用户自行定义。为了实现该项功能,系统在TDB中为每个任务保留一个字节的空间作为消息缓存,系统启动时将其初始化为0。如果任务q需要向任务j发送一个消息,内容为12,只需要调用函数:smt_send—ms甙j,1该函数将消息(i2)直接写入任务i的TDB中,当调度函数调用任务J的时候,会先取出相应位置的消息,作为参数传递给任务j的任务函数,从而实现了任务间的消息传递。当任务i的任务函数返回后,调度函数自动清空该消息缓存,等待下一个消息此机制的优点是简单、可靠,缺点是每个任务只有一个消息缓冲位置,所以不支持多个任务同时向一个任务发送消息。2.4内存管理内存管理模块的设计思想如下:首先用户需要在smt_conf.h中参考自己的硬件配置,定义可动态分配的内存的大小MAX—MAL_LOC—BYTE,设置该参数时需要为操作系统保留8×MAXJASK—NUM个宁节,并至少为堆栈保留40个字节。系统首先定义一个内存块管理结构,使用双向链表管理连续内存块:megie_num;//内存块标志used;,,使用标志,false表示该块内存未被使用然后在初始化的时候将用户设定的动态内存分配到一个静态大数组中:然后调用内存管理初始化函数:memed—D;//减去内存管理结构头所占的字节数此时系统中只有一个内存块,长度为最大值。用户任务可以调用函数:void+smt_malloc(uintl6if(p_mem一>used)(三一重工股份有限公司周翔周继辉2.3消息机制2);到来。f};g_roem[MAX——MALLOC——BYTE];smt_mm_init(void){P-menl=(structmemctl_t+)&g-mem;LOC—BYTE—sizeof(struct)8)g_mem;while(p_memf-NUI—L)(}if(p_mem—Men<len)fb0018+基金项日:长沙市科技计划资助重点项目(KZB064002)streetp_mem一>megic_num=MEM_MAGIC_NUM;p_mem一>p—pre=NULL;p_mem一>p_next=NULL;mern一>lenmemell_tvoidmemct|_tuint8uintl6len;memctl_【4p_pre;mcmctl_t+p_next;memctl—tp_nlem;p_mem一>used=FALSE;pMAX—MAL—lenlmemetl_t+p_mem;memetl_tp_new;p_mem=rstructp_memp_mem->p_next;continue;$tructstructstruet4=2万方数据脚∞∞mpl庙目r却脚。鲥嘲工程机械第S8誊∞咿隼1i{|¨舟3移植及应用实例)f//剩余的还可以建一个新块memcd_t+)(((uint8NULL;//内存申请失败申请内存。该函数首先查找一个长度足够的内存块,如果找小到,返回空指针;如果找到,则计算该块满足此次申请厉剩余的长度,如果大十内存块控制结构,则将剩余部分新建一个内存块,插入内存管理链表。然后返同申请到的内存块的州户数据首地址。当用户使用完一块内存,需要将其释放的时候,可以调用如下函数:并后面一个卒块if(p_we&&p_pre->used==FALSE)(//合并前面一个空块该函数首先通过检查MAGIC_NUM判断用户释放的内存块是否属于内存管理模块管理的范围,如果答案是否定的,则不对其进行处理,直接返回;如果校验正确,则判断该块的前后是否为空块,如果是空块,则顺便将其合并为一个较大的块,避免系统长时间运行后出现内存碎片。下而以MCS51和MSP430的区别为例说明开发人员在移植本操作系统时需要做的工作,并且以一个工程机械常用的红外线计数器的例子来简要说明本操作系统的应用方法。该计数器利用~个红外线发射器和~个红外线接收器感知两者间通过物体的个数,并对其总数和各时段的通过速度进行统计和计算。用户软件部分主要由4个任务组成,分别是:1)task_entr,计数任务,负责计数和主逻辑控制2)task_led,负责5个数码管的驱动,显示当前计数值或者计算值3)ask_key,负责4个按键的驱动,接收用户的按键操作,将用户的设置命令传递给计数任务4)task_comm,通信任务,负责与上位机通信,传递命令和数据开发人员叮以将精力全部放在4个任务函数的实现卜,完成以后,只需在smt_mit和smt_start之间加人创建任务的函数并没置好