test.zip目的:我们编写一个小程序,从内存0x32000000地址开始,将后面的100个直接设为C字符;
我们将test.c编译成test.bin后;
下载到内存的0x33000000地址上,然后
OpenJTAG> go 33000000
这就是运行33000000地址上的程序了;运行完后我们查看内存中0x32000000的值
OpenJTAG> md 32000000
32000000: 43434343 43434343 43434343 43434343 CCCCCCCCCCCCCCCC
32000010: 43434343 43434343 43434343 43434343 CCCCCCCCCCCCCCCC
32000020: 43434343 43434343 43434343 43434343 CCCCCCCCCCCCCCCC
32000030: 43434343 43434343 43434343 43434343 CCCCCCCCCCCCCCCC
32000040: 43434343 43434343 43434343 43434343 CCCCCCCCCCCCCCCC
32000050: 43434343 43434343 43434343 43434343 CCCCCCCCCCCCCCCC
32000060: 43434343 cc33cc33 dc37cc73 cc33cc77 CCCC3.3.s.7.w.3.
32000070: cc33cc33 cc33cc33 ce33cc33 cc33cc33 3.3.3.3.3.3.3.3.
32000080: cc33cc33 cc33cc33 cc33c437 cc33cc33 3.3.3.3.7.3.3.3.
32000090: cc3bcc33 dc33cc33 cc338c33 cc33cc33 3.;.3.3.3.3.3.3.
320000a0: cc334d33 cc33cc33 ccb3cc32 cc33cc33 3M3.3.3.2...3.3.
320000b0: cc33cc37 ce33cc33 cc33cc33 cc37cc37 7.3.3.3.3.3.7.7.
320000c0: cc33cc33 cc33cc33 cc33cc33 cc33cc33 3.3.3.3.3.3.3.3.
320000d0: cc33cc3b cc33cc13 cc33c833 cc33cc13 ;.3...3.3.3...3.
320000e0: ec33cc33 cc33cc33 cc33cc33 cc33cc33 3.3.3.3.3.3.3.3.
320000f0: cc33cc33 cc33cc33 cc33cc33 cc33cc33 3.3.3.3.3.3.3.3.
这样就说明,test.bin成功从内存0X32000000处写入了100个C字符。
test.c
-
#define addr (*(volatile unsigned char*)0x32000000)
-
int main()
-
{
-
int i;
-
for(i=0;i<100;i++)
-
{
-
*((&addr)+i)='C';
-
}
- return 0;
- }
Makefile
- test.bin:test.c
- arm-linux-gcc -c test.c -o test.o
- arm-linux-ld -Ttext 0x33000000 test.o -o test_elf
- arm-linux-objcopy -L elf32-littlearm -O binary test_elf test.bin /*-L elf32-littlearm 是指定大小端,这里是小端,objcopy主要是为 了去除文件elf格式信息 去头后文件不包含格式信息 段信息等内容 只是由机器指令的二进制编码构成*/
- clean:
- rm -f test.o test_elf test.bin