低级版本在此处,包括stm8s,stm32f103,和51的例程,和说明书.
http://www.amobbs.com/thread-5534907-1-1.html
之前陆陆续续进行了一些不痛不痒的改进.这次升级为V2.0,主要变化如下:
1.为适应KEIL,将原来的查询消息列队状态"SCH_UINT8 SCHTaskGetQFree()"改由宏定义,其它大部分也改为宏定义实现.
更改后,原来的直接获取状态由一步变为两步:
更改前:
if (SCHTaskGetQFree(&UartTxTcb) == SCH_Q_FREE) //检查UART_TX发送任务队列是否可用
更改后:
SCHTaskGetQFree(UartTxTcb, u8RetStatus) //"u8RetStatus"为新定义的局部变量
if (u8RetStatus == SCH_Q_FREE) //检查UART_TX发送任务队列是否可用
2.根据坛友的建议,增加了初始化任务时,同时也初始化任务计数的初始值以提高效率.如下,更改后"SCHTaskCreate"函数增加第三个参数.
//初始化任务的计数器为不同值,可使得各个任务错开运行,从而提高效率。
//原理:A和B两个任务都是间隔10个"SCH_SYS_TICKS_MS"运行一次,如果计数器初值相同,则会同时在第10个"SCH_SYS_TICKS_MS"时满足运行条件,
//则A,B会先后运行.但如果初始化时,A任务计数器初值为0,B任务计数器初值为1个"SCH_SYS_TICKS_MS",则A,B任务总会相差一个"SCH_SYS_TICKS_MS"
//满足运行条件,即A,B永远不同时满足运行条件,也就是让它们错开运行时间,从而提高效率.
//注:前提条件是任务执行间隔时间都大于"SCH_SYS_TICKS_MS"。
//下例STC89C52RC系统中,因为"SCH_SYS_TICKS_MS"为10ms,而大部分任务运行间隔也是10ms,所以是没有效果的.("SCH_SYS_TICKS_MS"为1ms则有效)
void vUserTaskCreate(void)
{
//任务创建的顺序即为任务运行的优先级顺序(从高优先级到低优先级)
SCHTaskCreate(&WdtClearTcb, vWdtClear, 0 * SCH_SYS_TICKS_MS);
SCHTaskCreate(&UartTxTcb, vUartDataSend, 1 * SCH_SYS_TICKS_MS);
SCHTaskCreate(&UartRxTcb, vUartReceiveData, 2 * SCH_SYS_TICKS_MS);
SCHTaskCreate(&AdcResultSendTcb, vAdcResultSend, 3 * SCH_SYS_TICKS_MS);
SCHTaskCreate(&AdcTreatmentTcb, vAdcTreatment, 4 * SCH_SYS_TICKS_MS);
SCHTaskCreate(&LedTestTcb, vLedTest, 5 * SCH_SYS_TICKS_MS);
}
原来的51单片机的IAR例程,也改为了KEIL例程,毕竟51使用KEIL的人员可能更多些,特别是学生.KEIL版本是V4.60.6.10
本来想等到重新整理好STM8S、STM32F103的例程和说明书再上传,但实在没时间,再拖恐怕就是几个月之后的事了.
所以就先上51单片机的KEIL版本了。其它STM8S/STM32F版本和说明书,哪位同学有兴趣也可以帮忙整理。
51单片机的KEIL版本:
schedule-8051-Keil 20140719.rar
(96.93 KB, 下载次数: 544)
2014-7-26 08:53 上传
点击文件名下载附件
欢迎测试并指出八哥。
结合时间触发+消息+protothread思想+支持优先级的非抢占调度器.
1. 支持优先级调度是指:当运行中的任务释放CPU后,优级级高的任务可以最先取得CPU控制权,而不是一般的顺序执行,等待轮到自己才能运行.
2. 本来就是针对单片机的,全C语言,移植方便.
一周热门 更多>