我正在使用基于cortex-A8的S5PV210。它以初始化开始,然后跳转到SDRAM的0x20000000并运行我的代码。所以我只需要将我的主函数放到0x20000000上。
据我所知,有两种方法可以做到。第一种方法是使用-Ttext = 0x20000000使.text从0x20000000开始。第二个是使用-fpie -pie生成与位置无关的代码。我正在使用后者。
它大部分时间都有效,但我被困在我的一个项目中。症状是printf(“123”)将打印永久的杂乱代码并且永远不会返回。如果我切换回使用-Ttext = 0x20000000,那么它将正常工作。
我已尝试过一些分析它的步骤:
更改我的main函数只需调用一个printf,这样我的代码就不会调用任何其他函数,如下所示:
int main(){ 的printf( “123”); 而(1); 返回0; }
因为-fpie -pie在大部分时间都工作得很好,我开始评论其他一些函数,最后发现如果我评论了足够的代码,printf会再次运行。
现在我很困惑,-fpie和-pie真的有用吗?
答案 0 :(得分:0)
行。我犯了一个愚蠢的错误。初始化会将我的代码从NAND复制到SDRAM中,其限制大小为5kb .....