RTOS
何小龙
专注于 Linux Graphics 领域
展开
-
《建立一个属于自己的AVR的RTOS》笔记——OSTimeDly
第四篇:只有延时服务的协作式的内核——OSTimeDly void OSTimeDly(unsigned int ticks) { if(ticks) //当延时有效 { OSRdyTbl &= ~(0x01<<OSTaskRunningPrio); TCB[OSTaskR原创 2013-12-12 11:11:28 · 798 阅读 · 0 评论 -
《建立一个属于自己的AVR的RTOS》笔记——OSStartTask
#define OS_TASKS 2 //设定运行任务的数量 struct TaskCtrBlock //任务控制块 { unsigned int OSTaskStackTop; //保存任务的堆栈顶 unsigned int OSWaitTick; //任务延时时钟 } TCB[3];原创 2013-12-12 10:41:01 · 784 阅读 · 0 评论 -
《建立一个属于自己的AVR的RTOS》笔记——OSTaskCreate
#define OS_TASKS 2 //设定运行任务的数量 unsigned char Stack0[100]; unsigned char Stack1[100]; struct TaskCtrBlock //任务控制块 { unsigned int OSTaskStackTop; //保存原创 2013-12-12 10:37:21 · 1057 阅读 · 0 评论 -
《建立一个属于自己的AVR的RTOS》笔记——完善的占先式内核
第八篇:完善的占先式内核 与第七篇没有多大区别,只是将前面的占先式内核与协作式内核相结合,增加了任务阻塞和信号量功能。 任务级切换:高优先级——>低优先级 中断级切换:低优先级——>高优先级原创 2013-12-12 13:14:24 · 887 阅读 · 0 评论 -
《建立一个属于自己的AVR的RTOS》笔记——时钟节拍中断对比
第七篇:占先式内核(只带延时服务)——时钟节拍中断对比增加了IntNum和OSCoreState两个变量register unsigned char IntNum asm("r4"); //中断嵌套计数器 //只有当中断嵌套数为0,并且有中断要求时,才能在退出中断时,进行任务调度 register unsigned char OSCoreState原创 2013-12-12 13:05:47 · 880 阅读 · 0 评论 -
《建立一个属于自己的AVR的RTOS》笔记——OSTaskSemPost
第五篇:完善的协作式的内核——OSTaskSemPost //发送一个信号量,可以从任务或中断发送 void OSSemPost(unsigned char Index) { if(Sem[Index].OSEventType) //当要求的信号量是共享型 { Sem[Index].OSEventState=0x原创 2013-12-12 12:53:43 · 1134 阅读 · 0 评论 -
《建立一个属于自己的AVR的RTOS》笔记——OSTaskSemPend
第五篇:完善的协作式的内核——OSTaskSemPend //任务等待信号量,挂起 unsigned char OSTaskSemPend(unsigned char Index,unsigned int Timeout) { //unsigned char i=0; if(Sem[Index].OSEventState) //信原创 2013-12-12 12:08:53 · 2000 阅读 · 0 评论 -
《建立一个属于自己的AVR的RTOS》笔记——任务切换全过程
第四篇:只有延时服务的协作式的内核——任务切换全过程原创 2013-12-12 11:47:05 · 1113 阅读 · 0 评论 -
《建立一个属于自己的AVR的RTOS》笔记——AVR中断
AVR中断响应过程:1.返回地址由硬件自动压入堆栈;2.硬件自动关闭全局中断,I位清零;3.硬件清对应中断标志位;4.执行中断服务程序(用户程序);5.执行RETI返回指令;6.硬件自动置位全局中断I;7.硬件自动弹出返回地址给PC。中断服务程序(用户程序):1.进入中断服务程序,必须先保护中断现场,保存R0-R1及SREG等重要寄 存器内容,一般是将其原创 2013-12-12 10:49:32 · 862 阅读 · 0 评论 -
《建立一个属于自己的AVR的RTOS》笔记——引言、资料下载
学习网上文章《建立一个属于自己的AVR的RTOS》,觉得是我目前看过最通俗易懂的RTOS设计讲解文章,顿时提起了我重新学习RTOS的兴趣!同时也为了方便以后记忆,于是将所学的知识进行积累,沉淀,最终汇聚成自己的宝贵财富。本文只是以图文的形式对原文内容加以阐述,并顺带自己的一些小总结,文中所使用的源码均来自于原文,并无抄袭之意。由于使用Visio编辑,排版布局欠佳,还请读者见谅。原创 2013-12-12 10:26:03 · 2345 阅读 · 0 评论 -
《建立一个属于自己的AVR的RTOS》笔记——任务调度对比
第七篇:占先式内核(只带延时服务)——任务调度对比 协作式内核 + 轮番调度内核 = 占先式内核原创 2013-12-12 13:10:55 · 806 阅读 · 0 评论 -
《建立一个属于自己的AVR的RTOS》笔记——时间片轮番调度
第六篇:时间片轮番调度法的内核 //进行任务调度 void OSSched(void) { // 根据中断时保存寄存器的次序入栈,模拟一次中断后,入栈的情况 __asm__ __volatile__("PUSH __zero_reg__ \t"); //R1 …… __asm__ __volatile__("In原创 2013-12-12 12:59:36 · 972 阅读 · 0 评论 -
《建立一个属于自己的AVR的RTOS》笔记——OSSemCreate
第五篇:完善的协作式的内核——OSSemCreate //信号量 struct SemBlk { unsigned char OSEventType; //型号 0,信号量独占型;1信号量共享型 unsigned char OSEventState; //状态 0,不可用;1,可用 unsigned char OSTaskPendT原创 2013-12-12 12:05:39 · 1063 阅读 · 0 评论 -
《建立一个属于自己的AVR的RTOS》笔记——OSTaskResume
第五篇:完善的协作式的内核——OSTaskResume //恢复任务 可以让被OSTaskSuspend或 OSTimeDly暂停的任务恢复 void OSTaskResume(unsigned char prio) { OSRdyTbl |= 0x01<<prio; //从任务就绪表上重置标志位 TCB[prio].OSWaitTick=0;原创 2013-12-12 12:02:54 · 784 阅读 · 0 评论 -
《建立一个属于自己的AVR的RTOS》笔记——OSTaskSuspend
第五篇:完善的协作式的内核——OSTaskSuspend //挂起任务 void OSTaskSuspend(unsigned char prio) { TCB[prio].OSWaitTick=0; OSRdyTbl &= ~(0x01<<prio); //从任务就绪表上去除标志位 if(OSTaskRunningPrio==prio)原创 2013-12-12 12:00:15 · 809 阅读 · 0 评论 -
《建立一个属于自己的AVR的RTOS》笔记——OSSched
第四篇:只有延时服务的协作式的内核——OSSched//进行任务调度 void OSSched(void) { // 根据中断时保存寄存器的次序入栈,模拟一次中断后,入栈的情况 PUSH_ALL; TCB[OSTaskRunningPrio].OSTaskStackTop=SP; //将正在运行的任务的堆栈底保存原创 2013-12-12 11:03:17 · 1141 阅读 · 0 评论