阅读:1382回复:7
请问用PB做release OS的时候怎么针对某一个文件把优化给关掉?
我用的芯片是ARMV4I,发现在编译retail版的时候,
原本好好的C代码被编成了乱七八糟的东西, 看汇编发现甚至调用的函数都和我要求的不一样, 不知道是什么原因。 现在希望能把那个相应的文件的优化给关掉, 请各位大虾指教。 |
|
论坛版主
|
沙发#
发布于:2004-12-27 13:24
好像只是在函数入口的地方堆栈操作变了,记不太清了,不过没几条阿,怎么会是乱七八糟的?
|
|
板凳#
发布于:2004-12-27 15:18
一般的优化是把函数调用,堆栈使用,以及逻辑代码进行优化,即使出错也是像没有保护某个寄存器,以及把eax优化成了ax这样的而已。
但是现在出的问题确实是非常奇怪,优化以后的汇编代码和c代码在有些地方根本就对不上号,好一些的地方也是变成了完全不能完成需要的指令。是不是PB对arm指令的优化做的非常差? 有哪位仁兄遇到过相似的问题吗? 我是希望把出错的文件的优化给关掉。 |
|
地板#
发布于:2004-12-27 15:59
在源代码里可以用
#pragma optimize("",off) ... #pragma optimize("",on) 把你不想优化的代码包含起来. 在SOURCES文件里设上WINCECOD=1,编译的时候会产生汇编文件 |
|
|
地下室#
发布于:2004-12-28 07:32
在源代码里可以用 感觉应该没有问题了,我试试看。 谢谢joyfly! |
|
论坛版主
|
5楼#
发布于:2004-12-28 13:40
"优化以后的汇编代码和c代码在有些地方根本就对不上号,好一些的地方也是变成了完全不能完成需要的指令。是不是PB对arm指令的优化做的非常差?"
有些东西编译出来好像是有点儿怪,不过都是对的,你要注意有的代码(主要是一些函数)被编译成THUMB指令了,是16位的。 |
|
6楼#
发布于:2004-12-28 15:20
哦,情况和你说的可能有点不一样,那些不是Thumb代码,无论是静态看还是动态跟踪,那些代码都和C代码相去甚远,甚至有的地方连调用的函数都不一样,所以我才怀疑是优化出了问题。
找不到解决的办法,只好绕过去了。 |
|
论坛版主
|
7楼#
发布于:2004-12-29 13:49
嗯,还有一种可能是链接的时候库的顺序给得不对好像也有影响,特别是几个库里面有同名函数,CE的编译器好像允许这样,好像是使用先找到的。你再看看,找到原因告知:)
|
|