我修改之后用IAP加载,启动时出现和原来这个帖子中一样的问题,不调度:
topic3231.html然后下载了最新的GNU Tools for ARM Embedded Processors 4.8-2013-q4,编译之后跑不起来。
这次用MDK的armcc编译之后也出现了和GCC 4.7编译一样的问题,启动之后在启动调度的地方失败。
这里还有一个问题没太搞明白,用MDK编译之后,ELF文件信息如下:
$ readelf -l rtthread-stm32.axf
Elf 文件类型为 EXEC (可执行文件)
入口点 0x80030ed
共有 1 个程序头,开始于偏移量168212
程序头:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000034 0x08003000 0x08003000 0x0c038 0x0db14 RWE 0x8
Section to Segment mapping:
段节...
00 ER_IROM1
0x8003000是IAP要求的。但GCC修改stm32_rom.ld之后不行:
$ readelf -l rtthread-stm32.axf
Elf 文件类型为 EXEC (可执行文件)
入口点 0x800d999
共有 2 个程序头,开始于偏移量52
程序头:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000000 0x08000000 0x08000000 0x0f7d8 0x0f7d8 R E 0x8000
LOAD 0x010000 0x20000000 0x0800f7d8 0x000bc 0x015b4 RW 0x8000
Section to Segment mapping:
段节...
00 .text
01 .data .stack .bss
这里我测试了一下,应该是因为Align太大的原因,如果设置为0x08100000是可以的。
但这里的Align好像不是在.ld文件中设置的?还没找到是什么情况。同样的GCC,我在CoIDE中
编译的对象也全部是2^15,但在emIDE中却又很小,在.ld中没有找出什么区别来,但又不应该
是编译器定死的。
另外奇怪的是,GCC 4.7和4.8编译出现readelf看到的是一样的,但4.7编译的系统可以由
IAP下载之后启动,只是启动之后不调度;而GCC 4.8编译出来之后一跑似乎就死了,没有
任何输出。
查看更多