51单片机在程序跳转时为什么只保存PC?

[复制链接]
5130|16
 楼主| areshan 发表于 2010-8-18 09:46 | 显示全部楼层 |阅读模式
51单片机在程序跳转时为什么只保存PC?内部通用寄存器的值会被跳转到的程序破坏掉吗???而UCOS保存的是全部内部公共寄存器的值。。。
我手头上的书上写的是SP是60H-7FH,SP的起点可以向后移动,但必须在60H--7FH之间,是这样的吗?
ayb_ice 发表于 2010-8-18 10:05 | 显示全部楼层
谁说51跳转时保存PC了
 楼主| areshan 发表于 2010-8-18 10:49 | 显示全部楼层
说错了,不是跳转,是调用,CALL,是为什么只保存PC,而不保存其他寄存器呢???
OUCHANGHUA 发表于 2010-8-18 11:48 | 显示全部楼层
学习了,,
3# areshan
ejack 发表于 2010-8-18 12:38 | 显示全部楼层
CALL为什么只保存PC,而不保存其他寄存器呢???
而UCOS保存的是全部内部公共寄存器的值

别拿一个汇编指令与UCOS比较。把UCOS的代码翻一翻,看看他都干了些什么,用了多少指令。



我手头上的书上写的是SP是60H-7FH,SP的起点可以向后移动,但必须在60H--7FH之间,是这样的吗?

不是。取决于单片机的内部ram空间。
ejack 发表于 2010-8-18 12:39 | 显示全部楼层
我去……二姨抽了……
一棵小草 发表于 2010-8-18 13:56 | 显示全部楼层
是为了灵活吧

你想保存其他,那你自己添加得了。
ayb_ice 发表于 2010-8-18 13:59 | 显示全部楼层
我还没有发现哪个MCU在调用程序时会保存PC以外的寄存器
 楼主| areshan 发表于 2010-8-18 14:28 | 显示全部楼层
那程序的调用就好象是在程序里插入另一段程序一样,不用保存公用寄存器(和程序一直执行下来一样)。而操作系统的是程序的切换,是不再回到原程序了,所以要保存公用的寄存器,这样理解差不多。 8# ayb_ice
aywyk 发表于 2010-8-18 15:18 | 显示全部楼层
操作系统的为了能够回到被中断的任务所以要把所有的寄存器的值都保存起来,一般程序调用只是简单的程序之间的调用,所以这两种是不一样的。
ayb_ice 发表于 2010-8-18 15:20 | 显示全部楼层
RTOS是用额外程序去实现保存寄存器的
和调用没有关系
这完全是两码事
这好比MCU就那些基本指令,但是却能做各种的事情...
huangqi412 发表于 2010-8-18 16:19 | 显示全部楼层
无语。。。

汽车轮胎为什么不能自己走?看看电动车,都能走能停能载人还有灯油喇叭耶。。。  很不明白。。。
NE5532 发表于 2010-8-18 22:37 | 显示全部楼层
楼主被操作系统毒害了,建议先研究一段时间汇编,可选方案是用操作系统继续做应用,不要管底层。



汇编是拔光了让你看,C是穿了衣服让你看,操作系统是穿了衣服还盖了棉被,当然啥都看不到了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| areshan 发表于 2010-8-19 10:23 | 显示全部楼层
谢谢NE5532,正在研究汇编了,差不多想明白了。操作系统任务切换和ACALL是两个概念。ACALL是任务的调用,只是把PC指向被调函数入口处,调用完返回,这个和C语言里的函数调用是一样的,函数在ROM里面可以放在任何位置,只要找到入口就可以调用,遇到RET函数调用结束了,返回,程序继续向下执行。操作系统的任务是独立的,每个任务都是一端独立的程序,任务切换要保存所用的公用寄存器,这样才能让任务执行的环境不变。而任务间的通讯都要通过事件来控制 14# NE5532
bobo1957 发表于 2010-8-20 12:35 | 显示全部楼层
设计问题,除非自己设计个mcu,要不然就适应吧
cooklxq 发表于 2010-8-20 14:02 | 显示全部楼层
那你看的是哪本书啊?》
经典cai 发表于 2010-8-20 15:49 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

728

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部