打印
[AVR单片机]

关于ICCAVR编译器中获得函数入口地址

[复制链接]
1692|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
游浪星|  楼主 | 2013-10-25 14:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uint  temp;
temp=(uint )task;
这里temp获得函数task的入口地址,但是我在反汇编时看到函数task的入口地址并不等于tmep。下面是反汇编的图,希望大家帮我看看。
file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/920356221/QQ/WinTemp/RichOle/UPHUJQ6M8G6AP%7B%7B(61V)7X6.jpg
这里看以看书temp=0x008c
file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/920356221/QQ/WinTemp/RichOle/QHK$8%7BX)%25]8VAZZE$JO%60(5M.jpg
但是这里可以看到task的入口地址是0x007f,
这是什么原因?

相关帖子

沙发
qin552011373| | 2013-10-25 23:02 | 只看该作者
不知道为什么看不到图

使用特权

评论回复
板凳
cxz_00| | 2013-10-25 23:12 | 只看该作者

使用特权

评论回复
地板
huangxz| | 2013-10-26 06:53 | 只看该作者
为啥一定要用iccavr呢,avr-gcc不是很好用么

使用特权

评论回复
5
游浪星|  楼主 | 2013-10-26 09:30 | 只看该作者
qin552011373 发表于 2013-10-25 23:02
不知道为什么看不到图

看不到图?算了 我找到原因了  还是谢谢你的回复

使用特权

评论回复
6
游浪星|  楼主 | 2013-10-26 09:33 | 只看该作者
huangxz 发表于 2013-10-26 06:53
为啥一定要用iccavr呢,avr-gcc不是很好用么

我现在想把ucos移植到mega128,网上下载的例子是用ICC的  呵呵  所以就用ICC了  现在发现两者编译器很多地方差很多

使用特权

评论回复
7
游浪星|  楼主 | 2013-10-26 09:53 | 只看该作者
感谢大家的回复,原因找到了,关键在于const这个关键字。
在ICCAVR6.26版本中,const关键字基本上有下面五种情况(跟keil的code相似):
const int table[]={1,2,3};//table表格只分配进程序存储器中
const char string[]="iccavr";//字符串数组只分配进程序存储器中
const char *prt1 //指针prt1位于数据存储器空间指向程序存储器空间的字符型数据
char *const prt2 //指针prt2位于程序存储器空间指向数据存储器空间的字符型数据
const char *const prt3 //指针prt3位于程序存储器空间指向程序存储器空间的字符型数据
而在ICCAVR7.22中,const关键字必须选中create “const” as“_flash”才能用const实现上面五种作用。
在我的程序中出现过这样语句:
      temp=*(uint const *)task;如果没有选中create “const” as“_flash”,就不能正确得到函数入口地址了。
    还有一点要说一下,
    void  task();
     uint  temp;
    temp=(uint)task;
上面三句在gcc中tmep得到的就是函数的入口地址,但是在ICCavr中并不是函数的入口地址,而是SRAM中某个内存地址,在这个地址里面才存放着task的入口地址,所以就有temp=*(uint const *)task来获得函数的入口地址了,开始我一直以GCC编译器的想法来想temp的值,以为是函数第一条指令的值呢?呵呵  现在看来是自己不够了解编译器的原因,现在UCOS在mega128上移植也成功了,哈哈。。。。

使用特权

评论回复
8
qin552011373| | 2013-10-26 10:48 | 只看该作者
游浪星 发表于 2013-10-26 09:30
看不到图?算了 我找到原因了  还是谢谢你的回复

还是看不到图,不知道是怎么回事,找到原因就好咯

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
游浪星 + 2 赞一个!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

45

帖子

0

粉丝