打印

函数声明 请指教

[复制链接]
1744|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
steven1234|  楼主 | 2007-4-18 09:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
djyos| | 2007-4-18 10:14 | 只看该作者

往指定地址写一个数啊

代码中好像少了三个括号,多了一个分号,应该是这样吧:
#define Writeflash(addr,dat)   (*((volatile unsigned int *)(addr<<1))=(unsigned int)dat)
    addr为地址,左移是为了与硬件匹配,你的板子应该是用了16位的flash,且cpu地址线a0没有连接,a1直接连到flash的a0.所以cpu的地址对应到flash就要左移1位.地址左移后再把它强制转换成指针,然后赋值.

使用特权

评论回复
板凳
steven1234|  楼主 | 2007-4-18 11:00 | 只看该作者

re:

我用的是16bit flash,在写数据进去时,这个代换是如何进行的,为什么中间会有一个"="号,如果是Writeflash(0x5555,0xaa),这个是如何进行代换的?
另外:D0~D15数据线怎么知道有数据传过来啊


新手,以上问题请勿见怪.

使用特权

评论回复
地板
ayb_ice| | 2007-4-18 16:52 | 只看该作者

这是带参数的宏定义

这是带参数的宏定义,看起来象函数,可不是函数...

使用特权

评论回复
5
xwj| | 2007-4-18 17:01 | 只看该作者

宏定义就是有参数的替换,可以是任意字符或指令

编译器扫描文件时碰到Writeflash(参数1,参数2)这样的字符串就会自动替换成
*((volatile unsigned int *)(1<<参数1)=(unsigned int)参数2;

不过你那个宏, 语法太成问题,编译不过的

使用特权

评论回复
6
平常人| | 2007-4-18 20:06 | 只看该作者

等号左面不能有运算式,(addr<<1)编译时出错

使用特权

评论回复
7
ayb_ice| | 2007-4-19 09:30 | 只看该作者

6楼说的不对吧...

使用特权

评论回复
8
djyos| | 2007-4-19 09:47 | 只看该作者

替换

#define Writeflash(addr,dat)   (*((volatile unsigned int *)(addr<<1))=(unsigned int)dat)
Writeflash(0x5555,0xaa);会被替换成
(*((volatile unsigned int *)(0x5555<<1))=(unsigned int)0xaa)
即向cpu的地址0xaaaa写入数据0xaa,cpu的0xaaaa正好对应flash地址0x5555.

这种替换在C语言的教材里面都会有讲的,只是前面的移位和类型转换要仔细理解.

使用特权

评论回复
9
steven1234|  楼主 | 2007-4-19 14:56 | 只看该作者

re

关于:
#define Writeflash(addr,dat)   (*((volatile unsigned int *)(addr<<1))=(unsigned int)dat)

当程序中有Writeflash(0x5555,0xaa),如何保证数据送到Flash,并且保证0x5555是地址,而0xaa是数据?

只有上面的宏义,如何找到Flash的地址,如何让ARM传出数据的,有高手可否详细解释一下,谢谢 .

使用特权

评论回复
10
steven1234|  楼主 | 2007-4-20 09:16 | 只看该作者

求救...想了几天想不明白(初学...痛苦...)

使用特权

评论回复
11
xwj| | 2007-4-20 09:44 | 只看该作者

你先仔细看看C教材中指针那一节,理解这一句的意思再说

(*((volatile unsigned int *)(addr<<1))=(unsigned int)dat);

使用特权

评论回复
12
steven1234|  楼主 | 2007-4-20 10:48 | 只看该作者

Re:

(*((volatile unsigned int *)(addr<<1))=(unsigned int)dat);

writeflash(0x5555,0xaa)

原来觉的只是将0x5555赋值给addr,然后addr左移一位,然后强制将其转换为unsigned int,并将其定义为指针,

现在不明白,为什么要将其定义为指针..有什么作用?

请楼上指点一下.

使用特权

评论回复
13
ayb_ice| | 2007-4-20 11:16 | 只看该作者

LZ精神可嘉,但不爱看书不行...

使用特权

评论回复
14
xwj| | 2007-4-20 11:24 | 只看该作者

晕,感情你是忽略全部括号 的优先运算啊?

使用特权

评论回复
15
djyos| | 2007-4-20 13:33 | 只看该作者

学习提高之道

先看书,肤浅地理解,
实践,遇到问题,
再看书,深入理解,
还是没有理解,问人,
弄明白以后,再回去看书,弄明白为什么当初不理解.

楼主还是要好好看看书啊,只有书上的是系统而全面的,别人的解答虽然是正确的,但只能针对某一个问题的某一个方面,看书才能举一反三.
说句不客气的话,在嵌入式软件领域,你这个问题真的是很基础的问题.

言重了,楼主不要砸**蛋.

使用特权

评论回复
16
steven1234|  楼主 | 2007-4-20 14:31 | 只看该作者

re:thanks

一直在跳者学 听了你讲的 还是专心看书先 。

谢谢!

使用特权

评论回复
17
nsearchf| | 2007-4-20 17:27 | 只看该作者

支持

2楼、4楼、8楼、15楼

看来“ djyos ”自学能力比较强  

使用特权

评论回复
18
yangfanyh| | 2007-4-24 15:05 | 只看该作者

我也在自学

支持 djyos 

使用特权

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

本版积分规则

4

主题

13

帖子

0

粉丝