中易网

请问谁能帮我详细的解释一下inportw及outportw这两个函数,详细的解释一下,如何使用在c及C++语言中。

答案:4  悬赏:60  
解决时间 2021-01-17 06:53
请问谁能帮我详细的解释一下inportw及outportw这两个函数,详细的解释一下,如何使用在c及C++语言中。
最佳答案
以下为两个关键的宏outportw和inportw,实现方法与解释:
MACRO
MOV_PC_LR
[ THUMBCODE
bx lr
|
mov pc,lr
]
MEND

EXPORT outportw
outportw strh r0, [r1]
MOV_PC_LR

EXPORT inportw
inportw ldrh r0, [r0]
MOV_PC_LR

首先看c与汇编的接口方式。根据nios的二进制接口规则,当编译器把c函数编译到汇编代码时,如果参数不多于4个,那么就由r0 r1 r2 r3来传递参数,函数的返回值将被放到r0中。比如c中调用这样一个函数outportw(dat,addr),那么当编译器将这个函数编译为汇编时,dat的值被赋给r0,addr的值被赋给r1。在于这个c文件在同一个文件夹下的s文件,如果其中有这么一段:
export outportw
outportw str r0,[r1]
MOV_PC_LR
那么调用在c函数中调用outportw()这个函数的实际作用就是将dat的值发送到addr的地址上去。这样就实现了对底层硬件资源的直接访问。
如果c中有这样一个函数rt = inportw(addr)并且在与这个c文件同一个文件夹下的s文件中有这样一段代码的话:
export inportw
inportw ldr r0,[r0]
MOV_PC_LR
那么这个函数的实际作用就是将addr地址上的值读出并作为函数返回值返回。
上面两段汇编代码中遇到的MOV_PC_LR就是一个MACRO。
MACRO
MOV_PC_LR
[THUMBCODE
bx lr
|
mov pc,lr
]
MEND
其实这种方式实现c与汇编的接口并不是很方便。这样做需要有比较好的汇编基础。其实可以通过相对简单的c宏定义来实现同样的功能。我之前经常使用这样的宏定义来访问固定的地址。#define rDATA (*((volatile unsigned int *)0x********)),这样data = rDATA; rDATA = data;就可以实现对固定内存地址的读写了。其实刚才的汇编代码也是对具体的内存地址进行读写,只是这个地址是作为参数传递的。只要将c函数中的宏定义改成这个样子就可以实现同样的功能。
#define outportw(dat,addr) (*(volatile U16*)(addr) = (dat))
#define inportw(addr) (*(volatile U16 *)(addr))
全部回答
不知道,另请高明。。。。。。。。。。
函数呢?
你买本书 看下
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
求LL果皇小鸟妮可和希的高清手机壁纸!
醴陵芳辉旅馆地址在什么地方,我要处理点事
打多弗朗明哥时,那个重力人为什么没被线切
脑袋小就不聪明么
出租车电召的好处是什么
PDA window CE系统怎么刷成Linux系统?
第一审程序的庭前审查
金蝶K3中生产任务单单状态反下达到计划反不了
我在国外开金矿,黄金怎样才能带回国内
求歌!在电视剧《穆桂英挂帅》中听到一首歌很
一视什么什么成语
阅读理解 Kate’s bedroom is big. A
《木府风波》七年级作文
“蒙”字的读音,蒙骗,等读音是怎样分辨的?
像人民大学3+2项目,回来学历都会被认可么?
推荐资讯
揭秘:溜须拍马讨好康熙的和珅贪了多少钱
小言心动萌物的男朋友
专场招聘会英语怎么说
蜀门凝神果怎么获得
________the good old days,he couldn’t he
互文的修辞手法.上联咏微风轻拂.下联咏细雨微
第一题为什么填wear而不是to wear和wearing
关于红色经典影片配音,万分感谢,满意给分。
米乐美术教育地址在哪,我要去那里办事
ebay卖家要求我竞标价和运费
SPSS做因子分析的时候那个旋转矩阵(Rotated M
成语小心意意还是小心异异哪个是对的
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?