PARTNER不支持semihost(semihost的SWI)
而ADS的编译连接结果中加入了使用semihostSWI的library 函数
解决办法:去掉或重写这些函数!
Step 1 : 用#pragma import(__use_no_semihosting_swi)保证用户程序不调用semihostSWI;
此后,link时会有
Error :L6200E:Symbol __semihosting_swi_guard multiply defined (by use_semi.o and use_no_semi.o)
因为,还有compiler helper functions 和 initialization code在调用semihostSWI
Step 2 : armlink -verbose 结果中,查出调用semihostSWI的外部库函数,如:
Loading member sys_exit.o from c_a__un.l.
definition: _sys_exit
reference : __I_use_semihosting_swi
Step 3 : 在用户程序中重写这些函数,如:
AREA ||.text||, CODE, READONLY
__user_initial_stackheap
LDR r0, =0x20000 ; HB
LDR r1, =0x40000 ; SB
; r2 not used (HL)
; r3 not used (SL)
MOV PC,LR
EXPORT __user_initial_stackheap
END
Step 4 : compile and link OK!
我已经试了一个小程序,调试通过,没有出现任何异常!
用户377235 2012-5-13 10:23
用户42640 2010-11-10 08:11
用户520338 2008-4-16 09:27