关于在arm裸板编程时使用printf问题的解决方法

来源:互联网 发布:js获取今天的毫秒数 编辑:程序博客网 时间:2024/06/05 07:34

    在ARM裸板驱动编程中,是不允许程序直接调用C库程序的。为什么呢?因为此时kernel还没有被加载,所以在封装在kernel层的C库的API是用不了的,那怎么办?

    在开发过程中,printf的功能我不用再详细多说,就是用来debug调试程序的,有了printf,写代码出错的时候能够快速定位错误。

    那么如何在裸板中调用呢?

    1、首先,我们在u-boot源代码中找到System.map这个文件,打开后我们能看到以下信息:(太多了,我只列举一部分)

40c29e94 T memscan40c29ebc T strstr40c29f1c T memchr40c29f50 T strmhz40c29fbc T udelay40c29fec T mdelay40c2a010 t put_dec40c2a238 t number.clone.140c2a450 t vsnprintf_internal.clone.340c2a8ec T simple_strtoul40c2a998 T strict_strtoul40c2aa10 T simple_strtol40c2aa38 T ustrtoul40c2aaac T simple_strtoull40c2ab88 T vsprintf40c2ab8c T sprintf
前面40开头的就是在uboot中的映射地址,右边的就是可以调用的api了。

接下来我们在.c中就可以这样定义声明:

//在uboot中找到printf的映射地址

40c135c0 T printf

#define vsprintf((int (*)(const char *, ...))0x40c135c0)

在main函数中就可以自由调用printf这个函数了


0 0
原创粉丝点击