首页|嵌入式系统|显示技术|模拟IC/电源|元件与制造|其他IC/制程|消费类电子|无线/通信|汽车电子|工业控制|医疗电子|测试测量
首页 > 分享下载 > 常用文档 > setjmp构建简单协作式多任务系统

setjmp构建简单协作式多任务系统

资料介绍
嵌入式系统论文

setjmp构建简单协作式多任务系统
摘要:讨论一个利用标准C语言setjmp库函烽实现查询式协作多任务系统,给出完整的内
核和样例程序并对源代码进行说明。该系统具有简单易用的特点,只需要编写存取堆栈
指针的宏就可方便地移植到新的平台上。文章详述了系统的优缺点,讨论一些性能扩展
的方法。该内核适用于中小规模的嵌入式软件。
    关键词:协作式多任务 C语言 setjmp
引言
本文介绍的是利用标准C语言setjmp库函数实现的具备此特点的协作式多任务系统。
从本质上讲,实时多任务操作系统应该具备按照优先级抢占调度的内核。然而,在实际
应用中,抢中式的多任务某种程序上带来了用户程序设计时数据保护的困难,并且,具
备抢占功能的多任务内核设计时困难也比较多,这会增加操作系统自身的代码,也使它
在小资源单片机系统中应用较少;而协作多任务系统的调度只在用户指定的时机发生,
这会大大简化内核和用户系统的设计,尤其本文实现的系统通过条件查询来放弃CPU,既
符合传统单片机程序设计的思维,又带来了多任务、模块化、可重入的编程便利。
Setjmp是标准C语言库函数的组成部分,它可以实现程序执行中的远程转操作。具体
来说,它可以在一个函数中使用setjmp来初始化一个全局标号,然后只要该函数未曾返
回,那么在其它任何地方都可以通过longjmp调用来跳转到setjmp的下一条语句执行。实
际上,setjmp函数将发生调用处的局部环境保存在一个jmp_buf的结构当中,只要主调函
数中对应的内存未曾释放(函数返回时局部内存就失效了),那么在调用longjmp的时候
就可以根据已保存的jmp_buf参数恢复到setjmp的地方执行。我们的系统中就是分析了s
etjmp标准库函数的特点,以简单的方式实现了协作式多任务。
1 演示程序
为了便于理解,首先给出多任务演示程序的
setjmp构建简单协作式多任务系统
本地下载

评论