本文共 747 字,大约阅读时间需要 2 分钟。
在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这个函数了
转载地址:http://pxuio.baihongyu.com/