Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1745433
  • 博文数量: 206
  • 博客积分: 1450
  • 博客等级: 上尉
  • 技术积分: 2285
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-11 11:38
个人简介

学习永无止境!!

文章分类

全部博文(206)

文章存档

2022年(5)

2019年(3)

2018年(8)

2017年(32)

2016年(7)

2015年(13)

2014年(44)

2013年(24)

2011年(6)

2010年(17)

2009年(46)

2008年(1)

分类: 嵌入式

2011-06-17 15:02:35

今天在用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中的函数了。
 
阅读(2074) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~