新闻中心

EEPW首页>嵌入式系统>设计应用> μC/OS-II在51单片机上的移植

μC/OS-II在51单片机上的移植

作者: 时间:2012-04-27 来源:网络 收藏

假设现在从Fun1一直运行到Fun4,此时堆栈结构如图1所示,中间的ADD_A到ADD_D为堆栈中的数据,左边的SP到SP-7为堆栈指针,右边的Fun1到Fun4为对应的调用函数。运行Fun4时,此时SP与SP-1所存的值为ADD_D,而ADD_D为Fun3中子函数Fun4的下一行的地址,即Fun3中3-2行的地址,以此类推,ADD_C为2-2行地址,ADD_B 图1函数运行及堆栈结构图为1-2行地址。

本文引用地址://m.amcfsurvey.com/article/171557.htm

b.JPG


当函数A调用函数B时,进入函数B时就会把函数A的断点地址压栈,而当函数B运行结束时则把堆栈中函数A的断点地址弹出到PC指针,程序接着从函数A的断点开始运行。如果在函数B中更改SP及SP-1中的数据,则函数B运行结束时就不会再返回函数A中,而返回到SP及SP-1更改后的数据所代表的地址。
以上是函数调用时的基本情况,如果是中断则堆栈不仅保存断点地址还会自动保存寄存器的值。任务调度就是靠中断来实现,中断中所保存的断点地址就是任务的断点地址,当本任务要再次执行时就把断点地址赋给PC就可以接着任务被中断时地址顺序执行。

3 头文件
相关的4个文件中有2个头文件,这2个头文件的比较简单,可以参考其它的移植程序。其中OS_CPU.H中主要是数据类型的定义、堆栈生长方向的定义、开关中断的定义以及函数级任务切换的宏定义。OS_CFG.H中主要是任务数、优先级数、事件数、每秒中断节拍数以及各种系统函数的使能定义。

4 汇编与C文件的移植
在要移植的汇编与C的两个文件中有14个函数,其中9个是接口函数,可根据实际需要来决定,有5个是必须写的。这5个函数分别是:OS_CPU_C.C文件中的OSTaskStkInit()和OS_CPU_A.ASM文件中的OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()与OSTickISR()。下面就这5个函数来做具体分析。



评论


相关推荐

技术专区

关闭