我用AM1808板子跑一个裸机程序算法程序,该裸机程序运行在AM1808的片上RAM中。起初,我将CCS编译优化选项设置成NONE,发现算法执行速度相当于在30M的CPU平台上的效果,后来将优化选项设置成LOCAL,算法执行时间由原来的5ms提高到了800us。将该算法在带有操作系统的AM1808上面跑,运行在DDR上,算法执行时间只需要400us。两者的CPU设置都是300MHz。
请问:问题存在什么地方,如何将裸机程序的执行时间提高到跟跑操作系统的一样快。
谢谢。
Yaoming Qin:
我猜想你的算法会不会特别小,都是放在cache里, 然后片上ram是不能cache的
Tony Tang:
回复 Yaoming Qin:
通溃操作系统会使能MMU,从而使能了Data Cache.
裸机程序则需要自己配置MMU。可以参考starterware相关的裸机代码。
peng lee1:
回复 Yaoming Qin:
我的算法从代码量上看不算大,也就几k,cache完全可以放下。
我不理解“片上ram是不能cache的”这句话,我已经把指令cache和Datacache使能了。片上RAM不能cache,那什么可以cache?
谢谢。
Yaoming Qin:
回复 peng lee1:
DDR sdram是可以cache的,我只是担心片上ram不会被cache映射到,所以慢点
peng lee1:
回复 Tony Tang:
我尝试使用starterware中的裸机代码,发现代码编译过不去,不知道怎么解决。
使用环境:ccs4.2
安照starterware中的裸机代码调用 CP15TtbSet((unsigned int )pageTable);
编译器提示我:CP16TtbSet没有定义,不知道哪出错了,希望专家给予帮助。谢谢。
__asm(" .sect \".text:CP15TtbSet\"\n"
" .clink\n"
" .global CP15TtbSet\n"
"CP15TtbSet:\n"
" mov r1, #0\n"
" mcr p15, #0, r1, c8, c7, #0\n"
" ldr r1, [r15, #8]\n"
" mcr p15, #0, r1, c3, c0, #0\n"
" mcr p15, #0, r0, c2, c0, #0\n"
" bx lr\n"
" .word 0x55555555\n");
Yaoming Qin:
回复 peng lee1:
你把整个starterware 编过了么?尝试过用gcc编译么
peng lee1:
回复 Yaoming Qin:
gcc编译器能在windows系统中用吗?如果能用,怎么样用?
Yaoming Qin:
回复 peng lee1:
1.gcc 只能在linux 下用。
2. 建议你用ccs gcc 分别把整个starterware 编一下,然后,再看看代码,会不会是搞错了
jianyi wang:
回复 peng lee1:
编译不过时,Console里的提示是什么?有可能是没有引用对应的Lib文件所致。
TI中文支持网