嵌入式作业

发布 2022-10-21 05:03:28 阅读 6589

读书报告。

计本2班,20122212714,刘瑞。

1、ostasksuspend()

挂起一个任务。

描述:调用此函数去挂起一个任务,如果传送到ostasksuspend()的任务的优先级是要挂起的任务或者是os_prio_self,那么这个任务将被挂起。

参数: prio:需要挂起任务的优先级。如果指定os_prio_self,那么这个任务将自己挂起,再发生再次调度。

返回:os_no_err:如果请求的任务被挂起。

os_task_suspend_idle:如果想挂起空闲任务。

os_prio_invalid :想挂起任务优先级不合理。

os_task_suspend_prio:需要挂起的任务不存在。

备注:调用时要十分小心,如果想挂起一个等待事件(邮箱,消息,队列)的任务,事件到来的时候将阻止这个任务运行。

注:需要与ostaskresume()恢复挂起的任务成对使用。

2、ostaskresume()

描述:唤醒一个用ostasksuspend()函数挂起的任务。ostaskresume()也是唯一能"解挂"挂起任务的函数。

参数:prio指定要唤醒任务的优先级。

返回:os_no_err:函数调用成功;

os_task_resume_prio:要唤醒的任务不存在;

os_task_not_suspended:要唤醒的任务不在挂起状态;

os_prio_invalid:参数指定的优先级大于或等于os_lowest_prio。

3、ostaskdel()

描述:删除一个指定优先级的任务。任务可以传递自己的优先级给ostaskdel(),从而删除自身。

如果任务不知道自己的优先级,还可以传递参数os_prio_self。被删除的任务将回到休眠状态。任务被删除后可以用函数ostaskcreate()或ostaskcreateext()重新建立。

参数:prio为指定要删除任务的优先级,也可以用参数os_prio_self代替,此时,下一个优先级最高的就绪任务将开始运行。

返回:os_no_err:函数调用成功。

注意:1、ostaskdel()将判断用户是否试图删除uc/os中的空闲任务(idletask);

2、在删除占用系统资源的任务时要小心,此时,为安全起见可以用另一个函数ostaskdelreq()。

4、ostaskdelreq()

描述:请求一个任务删除自身。通常ostaskdelreq()用于删除一个占有系统资源的任务(例如任务建立了信号量)对于此类任务,在删除任务之前应当先释放任务占用的系统资源。

具体的做法是:在需要被删除的任务中调用ostaskdelreq()检测是否有其他任务的删除请求,如果有,则释放自身占用的资源,然后调用ostaskdel()删除自身。例如,假设任务5要删除任务10,而任务10占有系统资源,此时任务5不能直接调用ostaskdel(10)删除任务10,而应该调用ostaskdelreq(10)向任务10发送删除请求。

在任务10中调用ostaskdelreq(os_prio_self),并检测返回值。如果返回os_task_del_req,则表明有来自其他任务的删除请求,此时任务10应该先释放资源,然后调用ostaskdel(os_prio_self)删除自己。任务5可以循环调用ostaskdelreq(10)并检测返回值,如果返回os_task_not_exist,表明任务10已经成功删除。

voidtask(void*data)

while(1)

参数:prio为要求删除任务的优先级。如果参数为os_prio_self,则表示调用函数的任务正在查询是否有来自其他任务的删除请求。

返回:os_no_err:删除请求已经被任务记录;

os_task_not_exist:指定的任务不存在,发送删除请求的任务可以等待此返回值,看删除是否成功;

os_task_del_idle:错误操作,试图删除空闲任务(idletask);

os_prio_invalid:参数指定的优先级大于os_lowest_prio或没有设定os_prio_self的值;

os_task_del_req:当前任务收到来自其他任务的删除请求;

注意:ostaskdelreq()将判断用户是否试图删除uc/os中的空闲任务(idletask)。

5、ostaskchangeprio()

描述:改变一个任务的优先级。

参数:oldp是任务原先的优先级。

newp是任务的新优先级。

返回:os_no_err任务优先级成功改变。

os_prio_invalid 参数中的任务原先优先级或新优先级大于或等于os_lowest_prio。(>os_lowest_prio)

os_prio_exist优先级为pip的任务已经存在;

os_prio_err参数中的任务原先优先级不存在。

注意:参数中的新优先级必须是没有使用过的,否则会返回错误码。在ostaskchangeprio()中还会先判断要改变优先级的任务是否存在。

6、ostaskquery()

描述:获取任务信息,函数返回任务tcb的一个完整的拷贝。应用程序必须建立一个os_tcb类型的数据结构容纳返回的数据。

需要提醒用户的是,在对任务os_tcb对象中的数据操作时要小心,尤其是数据项ostcbnext和ostcbprev。它们分别指向tcb链表中的后一项和前一项。

参数:prio为指定要获取tcb内容的任务优先级,也可以指定参数os_prio_self,获取调用任务的信息。pdata指向一个os_tcb类型的数据结构,容纳返回的任务tcb的一个拷贝。

返回:os_no_err:函数调用成功;

os_prio_err:参数指定的任务非法;

os_prio_invalid:参数指定的优先级大于os_lowest_prio。

注意:任务控制块(tcb)中所包含的数据成员取决于下述开关量在初始化时的设定。

os_task_create_en

os_q_en

os_mbox_en

os_sem_en

os_task_del_en

嵌入式作业

电力设备测控系统中的总线通讯协议实现。程俊 200910302013 一 程序实现的功能 嵌入式系统作为测控系统主机,依次每隔30秒获取设备数据,发送给各个传感器。1 程序实现是通个定义的一个数组,然后数组中分别放入 起始标记aa 设备类型 设备编号 数据发送请求55 校验位这里采用求和校验,而将第...

嵌入式作业

专业 电子信息工程班级 电信10 1 任课教师 姓名 学号成绩。题目 查阅相关资料,你认为选用哪一种硬件 芯片 和软件比较适合本专业的要求?为什么?答 个人觉得选用三星的6410芯片更适合本专业的要求,6410对比与2440不会更容易被淘汰,而且现在6410有很多开发板可以供我们自学,比如飞凌的ok...

嵌入式作业

include 基本系统数据类型。include 提供socket函数及数据结构。include 标准输入输出。include 标准库。include 提供错误号errno的定义,用于错误处理。include 字符串函数定义。include read函数 write函数和getpid函数等头文件。i...