共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							跳转至页
		回复
| 有奖活动 | |
|---|---|
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
| 送您一块开发板,2025年“我要开发板活动”又开始了! | |
			
			
			
						
			
 我要赚赏金
