今天在用ADS调试bootloader的时候发现一个问题,使用atoi()函数的时候,如果输入的参数为3开头的字符串,那么返回的值就是0,输入的参数为1开头的字符串就是正确的,比如输入“303”,那么返回的值为“0”,而输入”123“,返回值就是“123”,很是奇怪,最后调试发现ADS需要对C库进行初始化,不初始化就会出现这些莫名其妙的问题,stdlib.h包含的C库函数都是会出现问题,如果对C库进行初始化就会OK,经过修改和测试,有以下几种方法进行修改:
1、在汇编跳到C得时候,使用如下方法:
IMPORT __main
bl __main
此方法会自动初始化C库
2、在汇编跳到C的时候,在C函数里面进行C库的初始化,方法如下:
#ifdef __cplusplus
extern "C" {
#endif
int __rt_lib_init(void); //for ADS 1.0
void xmain(void);
#ifdef __cplusplus
}
#endif
在调用xmain函数之前进行,先调用__rt_lib_init(),这样也可以初始化C库。
3、在C函数里面进行初始化C库
#include
setlocale(LC_ALL,"C");
以上三种方法都是可以对C库进行初始化,初始化之后就可以使用stdlib.h中的函数了。
阅读(2064) | 评论(0) | 转发(0) |