大金刚 发表于 2015-8-11 10:51:52

求助:GCC指定SRAM地址读写数据

最近用AVR STUDIO6.0做一个项目,需要把数据写入SRAM指定地址,还有从SRAM指定地址读出。无法实现,希望高人们给出代码实例帮忙解决一下。
在SRAM的0X6A地址读写数据。ATMEGA8芯片

zouzhichao 发表于 2015-8-11 11:16:25

用指针,直接给指针p赋值0x6a,然后*p=data

大金刚 发表于 2015-8-11 11:18:40

zouzhichao 发表于 2015-8-11 11:16
用指针,直接给指针p赋值0x6a,然后*p=data

你的方法试过了,不行,没有那么简单。感谢你的回复!

zouzhichao 发表于 2015-8-11 11:30:28

大金刚 发表于 2015-8-11 11:18
你的方法试过了,不行,没有那么简单。感谢你的回复!

char*p;
p=0x006a;
*p=0x65;
汇编出来为
ldi r24,0x65
sts 0x006a,r24
哪里不对了?

大金刚 发表于 2015-8-11 11:40:07

zouzhichao 发表于 2015-8-11 11:30
char*p;
p=0x006a;
*p=0x65;


我写的是:
char *p;
p = 0x006A;
*p = 0x01;

Usart_Transmit(&p);
Usart_Transmit(*p);
结果是:0x5A、0x01。p的地址换成0x007A,通过串口发出来看到的还是0x5A,数据是对的。是否跟AVR STUDIO编译器有关?琢磨不通,还望相助

zouzhichao 发表于 2015-8-11 11:48:38

uart(p),uart(*p)

大金刚 发表于 2015-8-11 13:51:58

zouzhichao 发表于 2015-8-11 11:48
uart(p),uart(*p)

虽然得到了地址0x6A,可是不得不说这个答案很忽悠人啊,&p才是取地址好吗?{:3_55:}

zouzhichao 发表于 2015-8-11 14:30:42

大金刚 发表于 2015-8-11 13:51
虽然得到了地址0x6A,可是不得不说这个答案很忽悠人啊,&p才是取地址好吗?...

回炉重补c基础吧,指针没整明白

lllaaa 发表于 2015-8-11 14:42:56

大金刚 发表于 2015-8-11 13:51
虽然得到了地址0x6A,可是不得不说这个答案很忽悠人啊,&p才是取地址好吗?...

指针变量里存的就是个地址。p就是那个地址

但是存储地址也得要个变量,&p就是那个变量的地址。

只有p是数组的时候p和&p才是等价的。

gujiamao_love 发表于 2015-8-11 14:48:20

大金刚 发表于 2015-8-11 13:51
虽然得到了地址0x6A,可是不得不说这个答案很忽悠人啊,&p才是取地址好吗?...

&p取得是p这个指针的地址呀

大金刚 发表于 2015-8-12 08:55:30

zouzhichao 发表于 2015-8-11 11:16
用指针,直接给指针p赋值0x6a,然后*p=data

感谢帮我解决了问题!

zouzhichao 发表于 2015-8-12 10:44:06

大金刚 发表于 2015-8-12 08:55
感谢帮我解决了问题!

Avrstudio6编译后,会在目标文件夹下会生成一个.lss文件,这个就是对应的汇编代码,跟c同步比对,很清晰易懂,多看看有好处

哈士奇的语言 发表于 2015-9-6 16:35:26

本帖最后由 哈士奇的语言 于 2015-9-6 16:36 编辑

unsigned char data=0;
读取:data=*(unsigned char *)0x006A;
写入:*(unsigned char *)0x006A=data;
页: [1]
查看完整版本: 求助:GCC指定SRAM地址读写数据