近期想在 minigui 上实现触摸屏校准程序。
1. 移植 ts_calibrate 程序代码(里边含有float运算 & mknod 系统调用)为库 libxx.so.
2. 应用调用 libxx.so 的接口实现功能。
应用在校准的后期总是出现 illage instructions 的错误,即错误的指令,后面跟踪出现问题于 mknod, 然后屏蔽掉 mknod,还是出现同样的错误,
发现在 float x += (float)int_val 上。 上网搜有人说使用 -D__GCC_FLOAT_NOT_NEEDED 可以规避这个问题, 我试过了没用。
高了一整天,实在没有办法了,试过了在内核中加入 VFP, 库的编译参数很多方法,无效。
自己写了一个 float 的简单测试 demo, 发现运行正常, why?
后面忽然醒悟, 差别在于 编译的结果是 库/ 是应用程序的问题? ts_calibrate 和测试demo都是 application, 都能正常运行, 而变成 library 就非正常。
把库内的相关代码编译到应用中去,测试果然OK, 包括 mknod 也边的正常了, 不使用 -D__GCC_FLOAT_NOT_NEEDED也正常。
结论:
1. 关于 root权限的系统调用 和 浮点运算都应该放到应用中,不能放在库里。 不清除为什么,后面在考虑问题处在何处。
阅读(3297) | 评论(0) | 转发(0) |