这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 加快vxworks在s3c4510b上启动速度的一个方法

共1条 1/1 1 跳转至

加快vxworks在s3c4510b上启动速度的一个方法

菜鸟
2003-02-14 21:10:46     打赏
如果你用的是snds100提供的bsp的话,vxworks在s3c4510b上启动速度将非常慢,即使是bootrom_uncmp,从上电到出现启动画面也要4秒-5秒的时间。如果是bootrom这种压缩的映象,则由于有解压过程,往往要6秒多的时间,非常久。   原因何在呢?这是因为s34510b的cache没有打的原故。所以我们要作的就是打开cache。从romInit()到romStart()我实际测了下(50MHZ)约为300ms左右,从usrInit()到打印启动画面所开销的时间也较短。而大量的启动时间就浪费在romStart()中!所以我在romStart()一开始就加入打开cache的操作,结果发现从上电到出现启动画面只要1秒多的时间!大大缩短了启动时间。   打开cache的操作在sysLib.c中就有,直接搬过来?当然会在编译时出错!改一改函数名称,就可以了。下面就是我的代码。 bootInit.c文件: ---------------------------------------------------------------------------------------------- [color=#DC143C]#include "../snds100/x4043Op.c"[/color] void romStart ( FAST int startType /* start type */ ) { #if ((CPU_FAMILY==SPARC) || (CPU_FAMILY==MIPS) || (CPU_FAMILY==I80X86) || \ (CPU_FAMILY==PPC) || (CPU_FAMILY==ARM)) volatile /* to force absolute adressing */ #endif /* (CPU_FAMILY==SPARC) */ FUNCPTR absEntry; /* to avoid PC Relative Jump Subroutine */ #if (CPU_FAMILY==ARM) && (!defined(ROM_RESIDENT)) VOIDFUNCPTR ramfillLongs = fillLongs; /* force call to RAM */ #define fillLongs(a,b,c) ramfillLongs(a,b,c) #endif /* (CPU_FAMILY==ARM) */ [color=#DC143C]#ifdef SNDS_CACHE_ENABLE armCacheEnable(SNDS_CACHE_8K); /* enable cache */ #endif[/color] 。。。。。。(后面完全一样) } ------------------------------------------------------------------------------------------------------------- 在bsp下增加一个文件x4043Op.c: -------------------------------------------------------------------------------------------------------------- #include #include "snds100.h" #ifdef INCLUDE_CACHE_SUPPORT /*local defines*/ #ifndef SNDS_CTRL_REG_READ # define SNDS_CTRL_REG_READ(x,result) \ ((result) = *(volatile UINT32 *)(x)) #endif /*SNDS_READ*/ #ifndef SNDS_CTRL_REG_WRITE # define SNDS_CTRL_REG_WRITE(x,data) \ (*((volatile UINT32 *)(x)) = (data)) #endif /*SNDS_WRITE*/ void armCacheEnable ( int cachesize ) { UINT32 result; SNDS_CTRL_REG_READ(SNDS_SYSCFG,result); switch(cachesize) { case SNDS_CACHE_4K: armCacheFlush(); SNDS_CTRL_REG_WRITE(SNDS_SYSCFG, (result & ~SNDS_CACHE_MODE)); SNDS_CTRL_REG_WRITE(SNDS_SYSCFG, (result|SNDS_WRITE_BUFF|SNDS_CACHE_ENABLE)); break; case SNDS_CACHE_8K: armCacheFlush(); SNDS_CTRL_REG_WRITE(SNDS_SYSCFG, (result & ~SNDS_CACHE_MODE)); SNDS_CTRL_REG_WRITE(SNDS_SYSCFG, (result|SNDS_WRITE_BUFF|SNDS_CACHE_ENABLE|SNDS_CACHE_8K)); break; default: break; } } void armCacheDisable(void) { UINT32 result; SNDS_CTRL_REG_READ(SNDS_SYSCFG, result); SNDS_CTRL_REG_WRITE(SNDS_SYSCFG, (result & ~(SNDS_CACHE_ENABLE|SNDS_WRITE_BUFF))); } void armCacheFlush(void) { int i; UINT32 *tagram; tagram = (UINT32 *)SNDS_TAGRAM; armCacheDisable(); for(i=0; i < 256; i++) { *tagram = 0x00000000; tagram += 1; } } #endif /* INCLUDE_CACHE_SUPPORT */ -------------------------------------------------------------------------------------------------- 可以看出,其实打开cache挺简单的,如果你汇编还可以的话,完全可以在romInit.s中加入打开cache的指令,启动将会变得更快。  Good Luck!



关键词: 加快     vxworks     s3c4510b     启动     速度    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]