共1条
1/1 1 跳转至页
加快vxworks在s3c4510b上启动速度的一个方法
如果你用的是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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |