标题: 关于ucos的模拟堆栈的理解 [打印本页]

作者: aiohu    时间: 2020-5-5 09:49
标题: 关于ucos的模拟堆栈的理解
看各类的资料对模拟堆栈的解释不是很多,更有的资料说是在仿真运行时用到的。总之,困扰的很。以下是我的理解,写出来供大家参考。由于学识水平的局限,疏漏难免,仅仅供大家参考。
  实时多任务系统是要求函数重入的,这就导致了函数的局部变量的在存储区内的覆盖,从而引发了不可预见的错误的发生。系统工作的不正常。
在单片机的嵌入式系统中,这是非常重要的问题。因此,可重入函数的参数传递和局部变量的存储与不可重入函数的是不一样的。为解决该问题,C51编译器给重入函数分配了一个模拟堆栈。通过这个模拟堆栈传递和存储参数、变量,这样就避免了变量、参数得值彼此覆盖。
通俗的讲,对可重入得函数,编译器给他分配了一个专有的内存区,这个区是以数组的形式定义的,叫堆栈。
   模拟栈以全局变量?C_IBP   ?C_XBP作为栈指针,变量定义在DATA   IDATA   XDATA中
在DATA中是0-----127  在IDATA是128------255   在XDATA是   0XFF------OX03FF (1024或65535)。以上这些要在startup.a51的启动文件中设置或者说初始化。
  在工程初始化时,有small compact larger三个模式  ,值得就是存储的大小。 small 对应的是?C_IBP
compact 对应的?C_PBP  LARGE对应的是?C_XBP






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1