关于在arm裸板编程时使用printf问题的解决方法
2016-12-15 09:53
405 查看
在ARM裸板驱动编程中,是不允许程序直接调用C库程序的。为什么呢?因为此时kernel还没有被加载,所以在封装在kernel层的C库的API是用不了的,那怎么办?
在开发过程中,printf的功能我不用再详细多说,就是用来debug调试程序的,有了printf,写代码出错的时候能够快速定位错误。
那么如何在裸板中调用呢?
1、首先,我们在u-boot源代码中找到System.map这个文件,打开后我们能看到以下信息:(太多了,我只列举一部分)
40c29e94 T memscan
40c29ebc T strstr
40c29f1c T memchr
40c29f50 T strmhz
40c29fbc T udelay
40c29fec T mdelay
40c2a010 t put_dec
40c2a238 t number.clone.1
40c2a450 t vsnprintf_internal.clone.3
40c2a8ec T simple_strtoul
40c2a998 T strict_strtoul
40c2aa10 T simple_strtol
40c2aa38 T ustrtoul
40c2aaac T simple_strtoull
40c2ab88 T vsprintf
40c2ab8c T sprintf前面40开头的就是在uboot中的映射地址,右边的就是可以调用的api了。接下来我们在.c中就可以这样定义声明:
//在uboot中找到printf的映射地址
40c135c0 T printf
#define vsprintf ((int (*)(const char *, ...))0x40c135c0)
在main函数中就可以自由调用printf这个函数了
在开发过程中,printf的功能我不用再详细多说,就是用来debug调试程序的,有了printf,写代码出错的时候能够快速定位错误。
那么如何在裸板中调用呢?
1、首先,我们在u-boot源代码中找到System.map这个文件,打开后我们能看到以下信息:(太多了,我只列举一部分)
40c29e94 T memscan
40c29ebc T strstr
40c29f1c T memchr
40c29f50 T strmhz
40c29fbc T udelay
40c29fec T mdelay
40c2a010 t put_dec
40c2a238 t number.clone.1
40c2a450 t vsnprintf_internal.clone.3
40c2a8ec T simple_strtoul
40c2a998 T strict_strtoul
40c2aa10 T simple_strtol
40c2aa38 T ustrtoul
40c2aaac T simple_strtoull
40c2ab88 T vsprintf
40c2ab8c T sprintf前面40开头的就是在uboot中的映射地址,右边的就是可以调用的api了。接下来我们在.c中就可以这样定义声明:
//在uboot中找到printf的映射地址
40c135c0 T printf
#define vsprintf ((int (*)(const char *, ...))0x40c135c0)
在main函数中就可以自由调用printf这个函数了
相关文章推荐
- 关于在arm裸板编程时使用printf问题的解决方法
- 关于在arm裸板编程时使用printf问题的解决方法
- VS2010使用C++/CLI编程窗口无法显示问题解决方法
- 关于ASP.NET“操作必须使用一个可更新的查询”问题的解决方法
- 关于Android4.0 emulator-arm.exe-应用程序错误,内存不能为"read"问题解决方法
- 在SharePoint中服务器端使用Word编程模型转换PDF遇到的问题以及解决方法
- 关于在使用Exchange2003系统时无法向sina,yahoo,hotmail等邮箱发送邮件问题的解决方法
- 关于使用asp.net调试器出现的问题及相关解决方法
- 【转】关于Android4.0 emulator-arm.exe-应用程序错误,内存不能为"read"问题解决方法
- 关于在英创em9161板上使用ADO.net连接远程数据库提示 “无法找到 PInvoke dll"dbnetlib.dll"”问题解决方法
- 如何尽可能高效地使用论坛+解决编程问题的一些方法
- 关于PPT制作和使用的个别问题提出来的解决方法
- 使用printf修改变量的值 —— VS2008中使用%n输出遇到的问题及解决方法
- 解决变参数问题:va_list、va_start、vsnprintf、va_end的使用方法和实例
- 关于使用VS.Net2003调试器出现的问题及相关解决方法
- 关于更改ip后dbconsole服务不能启动(em不能使用)问题的根本解决方法
- 关于更改ip后dbconsole服务不能启动(em不能使用)问题的根本解决方法(ZZ)
- 关于安装IE8之后VS2008使用MFC出现问题的解决方法
- 关于CSS中内层使用float导致外层的背景无法显示的问题的解决方法
- 关于ArrayList使用时常遇到的问题以及解决方法