找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1621|回复: 0
打印 上一主题 下一主题
收起左侧

关于ucos的模拟堆栈的理解

[复制链接]
跳转到指定楼层
楼主
ID:216359 发表于 2020-5-5 09:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看各类的资料对模拟堆栈的解释不是很多,更有的资料说是在仿真运行时用到的。总之,困扰的很。以下是我的理解,写出来供大家参考。由于学识水平的局限,疏漏难免,仅仅供大家参考。
  实时多任务系统是要求函数重入的,这就导致了函数的局部变量的在存储区内的覆盖,从而引发了不可预见的错误的发生。系统工作的不正常。
在单片机的嵌入式系统中,这是非常重要的问题。因此,可重入函数的参数传递和局部变量的存储与不可重入函数的是不一样的。为解决该问题,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

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表