打印

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

[复制链接]
4198|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
areshan|  楼主 | 2010-8-18 09:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
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

使用特权

评论回复
5
ejack| | 2010-8-18 12:38 | 只看该作者
CALL为什么只保存PC,而不保存其他寄存器呢???
而UCOS保存的是全部内部公共寄存器的值

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



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

不是。取决于单片机的内部ram空间。

使用特权

评论回复
6
ejack| | 2010-8-18 12:39 | 只看该作者
我去……二姨抽了……

使用特权

评论回复
7
一棵小草| | 2010-8-18 13:56 | 只看该作者
是为了灵活吧

你想保存其他,那你自己添加得了。

使用特权

评论回复
8
ayb_ice| | 2010-8-18 13:59 | 只看该作者
我还没有发现哪个MCU在调用程序时会保存PC以外的寄存器

使用特权

评论回复
9
areshan|  楼主 | 2010-8-18 14:28 | 只看该作者
那程序的调用就好象是在程序里插入另一段程序一样,不用保存公用寄存器(和程序一直执行下来一样)。而操作系统的是程序的切换,是不再回到原程序了,所以要保存公用的寄存器,这样理解差不多。 8# ayb_ice

使用特权

评论回复
10
aywyk| | 2010-8-18 15:18 | 只看该作者
操作系统的为了能够回到被中断的任务所以要把所有的寄存器的值都保存起来,一般程序调用只是简单的程序之间的调用,所以这两种是不一样的。

使用特权

评论回复
11
ayb_ice| | 2010-8-18 15:20 | 只看该作者
RTOS是用额外程序去实现保存寄存器的
和调用没有关系
这完全是两码事
这好比MCU就那些基本指令,但是却能做各种的事情...

使用特权

评论回复
12
huangqi412| | 2010-8-18 16:19 | 只看该作者
无语。。。

汽车轮胎为什么不能自己走?看看电动车,都能走能停能载人还有灯油喇叭耶。。。  很不明白。。。

使用特权

评论回复
13
NE5532| | 2010-8-18 22:37 | 只看该作者
楼主被操作系统毒害了,建议先研究一段时间汇编,可选方案是用操作系统继续做应用,不要管底层。



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

使用特权

评论回复
14
areshan|  楼主 | 2010-8-19 10:23 | 只看该作者
谢谢NE5532,正在研究汇编了,差不多想明白了。操作系统任务切换和ACALL是两个概念。ACALL是任务的调用,只是把PC指向被调函数入口处,调用完返回,这个和C语言里的函数调用是一样的,函数在ROM里面可以放在任何位置,只要找到入口就可以调用,遇到RET函数调用结束了,返回,程序继续向下执行。操作系统的任务是独立的,每个任务都是一端独立的程序,任务切换要保存所用的公用寄存器,这样才能让任务执行的环境不变。而任务间的通讯都要通过事件来控制 14# NE5532

使用特权

评论回复
15
bobo1957| | 2010-8-20 12:35 | 只看该作者
设计问题,除非自己设计个mcu,要不然就适应吧

使用特权

评论回复
16
cooklxq| | 2010-8-20 14:02 | 只看该作者
那你看的是哪本书啊?》

使用特权

评论回复
17
经典cai| | 2010-8-20 15:49 | 只看该作者
:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

728

帖子

0

粉丝