查看: 7070|回复: 6

[MPC] 【求助】做uCOS移植到MPC5604上时,对PowerPC汇编指令不理解

[复制链接]

该用户从未签到

24

主题

666

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1072
最后登录
2023-4-10
发表于 2014-11-26 13:43:08 | 显示全部楼层 |阅读模式
本帖最后由 霹雳小猪 于 2014-11-26 17:36 编辑

做uCOS移植到MPC5604上时,对这样一段汇编代码不理解,如下:
在os_cpu.h文件中会定义开关中断函数:
#define  OS_ENTER_CRITICAL()   do { cpu_sr = OS_CPU_SR_Save(); } while (0)
#define  OS_EXIT_CRITICAL()      do { OS_CPU_SR_Restore(cpu_sr); } while (0)

其中函数
OS_CPU_SR  OS_CPU_SR_Save       (void);
void              OS_CPU_SR_Restore   (OS_CPU_SR  cpu_sr);
在os_cpu_a.s文件中用汇编代码实现的,如下:
OS_CPU_SR_Save:
    mfmsr   r3
    wrteei  0
    se_blr

OS_CPU_SR_Restore:
    mtmsr   r3
    se_blr

指令se_blr为跳转指令,函数调用结束后跳转回去可以理解!

问题来了,OS_CPU_SR   OS_CPU_SR_Save(void);函数把msr寄存器内容存储到r3寄存器,然后关中断,它是如何返回值给变量 cpu_sr 的?
                 void   OS_CPU_SR_Restore(OS_CPU_SR  cpu_sr);函数又是如何把cpu_sr的值送到r3,然后装入msr寄存器的?
问题关键就是参数如何传递的。
求大神帮助理解下,不胜感激!
我知道答案 目前已有6人回答
回复

使用道具 举报

该用户从未签到

24

主题

666

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1072
最后登录
2023-4-10
 楼主| 发表于 2014-11-27 10:14:22 | 显示全部楼层
回复

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-12-1 11:29:14 | 显示全部楼层
楼主你好!
你的问题我待会帮你转给我们的POWER PC工程师,他会帮你解答,还请耐心等待下。
回复 支持 反对

使用道具 举报

该用户从未签到

24

主题

666

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1072
最后登录
2023-4-10
 楼主| 发表于 2014-12-1 15:00:03 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-12-1 11:29
楼主你好!
你的问题我待会帮你转给我们的POWER PC工程师,他会帮你解答,还请耐心等待下。 ...

谢谢,发了一个新帖,也是MPC5604P的的问题,请一并转发了吧,纠结了好久的问题。谢谢了!
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-12-1 15:06:49 | 显示全部楼层
霹雳小猪 发表于 2014-12-1 15:00
谢谢,发了一个新帖,也是MPC5604P的的问题,请一并转发了吧,纠结了好久的问题。谢谢了! ...

你好,帮你转了问题。
但是可能我们的power PC工程师现在比较忙,暂时没有时间回答你这个问题。
如果比较急,你也可以直接去官网提交一个技术服务请求,那边会有更多相关的工程师帮你解答。
建立技术服务请求的链接:飞思卡尔产品论坛快速购买通道及SR提交流程
问题内容请采用英文书写方式。
回复 支持 反对

使用道具 举报

该用户从未签到

24

主题

666

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1072
最后登录
2023-4-10
 楼主| 发表于 2014-12-1 15:08:52 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-12-1 15:06
你好,帮你转了问题。
但是可能我们的power PC工程师现在比较忙,暂时没有时间回答你这个问题。
如果比较 ...

好的,谢谢了!
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

1

帖子

0

新手上路

Rank: 1

积分
22
最后登录
2023-2-22
发表于 2019-1-17 10:59:11 | 显示全部楼层
r3:commonly used as the return value of a function, and also the first argument

cpu_sr = OS_CPU_SR_Save() :
                                           r3 = msr
                                           cpu_sr = r3

OS_CPU_SR_Restore(cpu_sr) :
                                           r3 = cpu_sr
                                           msr = r3



回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-20 16:51 , Processed in 0.098559 second(s), 26 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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