保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

KEIL RTX51 TINY内核的分析与应用


变量和宏,用户都可以根据自己的系统配置灵活修改;后者是系统内核,完成系统调用的所有函数。
  
  3.1主程序main
  
  主程序main的主要任务是初始化各任务堆栈栈底指针STKP、状态字STATE和定时器T0,创建任务0并将其导入运行队列。这个过程加上KEILC51的启动代码CSTARTUP正是一般嵌入式系统中BSP所作的工作。
  
  3.2定时器T0中断服务程序
  
  内核使用定时器T0作为定时节拍发生器,是任务切换、时间片轮转的依据。中断服务程序有三个任务。
  
  ①更新各个任务节拍数:将STATE[taskid].timer减1,如果某任务超时(STATE[taskid].timer=0),并且该任务正在等待超时事件,则将该任务置为“READY”状态,使其返回任务队列。
  
  ②检查自由堆栈空间:若自由堆栈空间范围小于FREESTACK(默认为20字节)时,可以调用宏STACK_ERROR,进行堆栈出错处理。
  
  ③检查当前任务(处于RUNNING状态)的时间片是否到时。若当前任务的时间片到时,将程序转到任务切换程序段(taskswitching)切换下一任务运行。
  
  程序流程如图3所示。
  
  3.3任务切换程序段
  
  这个程序段是整个内核中最核心的一们,
  
  
  
  主要功能是完成任务切换。它共有两个入口TASKSWITCHING和SWITCHINGNOW。前者供定时器T0的中断服务程序调用,后能供系统函数os_delete和os_wait调用。相应也有两个不同的出口。
  
  其基本工作流程是首先将当前任务置为“TIMEOUT”状态,等待下一次时间片循环,其次找到下一个处于“READY”状态的任务并使其成为当前任务。然后进行堆栈管理,将自由堆栈空间分配给该任务。清除使该任务进入“READY”或“TIMEOUT”状态的相关位后,执行该任务。流程框图如图4所示。
  
  3.4os_wait程序段
  
  主要完成os_wait函数。任务调用os_wait函数,挂起当前任务,等待一个或几个间隔(K_IVL)、超时(K_TMO)、信号(K_SIG)事件。如果所等待的事件已经发生,继续执行当前任务;如果所等待的事件没有发生,则置相应的等待标志后,挂起该任务,转任务切换程序段(switchingnow)切换到下一任务。
  
  3.5其它程序段
  
  其它程序段主要完成os_create_task、os_delete_task函数和有关信号处理的os_send_signal、isr_send_signal、os_clear_signal函数。这些函数功能相对比较简单,主要是根据上述存储器管理策略进行堆栈的分配和删除,并改变任务字STATE[tasked].state,使任务处于不同的状态。
  
  以上所有程序段,若涉及到任务状态字操作,必须关中断,以防止和定时器T0同时操作任务状态字。
  
  结语
  
  以上分析可以看到这个内核简洁高效,非常适合于运行在资源较少的单片机上。根据其设计思想,我们也很容易把它移植到其它单片机上。但是它也有缺陷,例如:不支持外部任务切换;不支持用户使用定时器T0等。这些缺陷的存在,限制了任务切换的

《KEIL RTX51 TINY内核的分析与应用(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/175822.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。