问:
void copy_2th_to_sdram(void)
{
unsigned int *pdwSrc = (unsigned int *)2048;
unsigned int *pdwDest = (unsigned int *)0x30004000;
while (pdwSrc < (unsigned int *)4096)
{
*pdwDest = *pdwSrc;
pdwDest++;
pdwSrc++;
}
}
想问下为什么0x30004000前面还要加(unsigned int *),0x30004000已经代表地址了啊;
还有汇编程序里像
.text
.global _start
.align 4
这样子的为什么加个点,.align 4 又是什么意思呢?
答:
.text 部分是处理器开始执行代码的地方.
.global关键字用来让一个符号对链接器可见,可以供其他链接对象模块使用。.global _start 让 _start 符号成为可见的标识符,这样链接器就知道跳转到程序中的什么地方并开始执行。
0x30004000只是个立即数。前面加(unsigned int *),表示把它强转成指针,另外表示它指向的是unsigned int类型的数据。
楼上说得对0x30004000只能是数,强制转换的目的是把它转换成相应形式的指针,如果不这么作有些编译器会出警告,而有些编译器会认为是个错误。
align 4 应该是四字节对齐的意思,也就是说这段数据的起始地址是4的整数倍,如0x00000018,0x00000020,如果不做这样的修饰,编译器可能会为了节省内存而使用连续空间的形式接着前边数据的地址,导致下边的数据地址是0x00000011 | ||
问: 再问个问题,在ARM环境下,
答:
|