⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readmacaddressfromflash.c

📁 INTEL IXP425的VXWORKS BSP
💻 C
字号:
#include "vxWorks.h"
#include "stdio.h"
#include "types.h"
#include "iosLib.h"
#include "errnoLib.h"
#include "dosFsLib.h"
#include "time.h"
#include "ctype.h"

#define bool int
#define false 0
#define true 1

#define PARAMETER_BASE 0x50FC0000
#define CONFIG_SPACE_SIZE 0x1000

/*unsigned char flash_config_image[CONFIG_SPACE_SIZE];*/
unsigned char *flash_config_base = (unsigned char *)PARAMETER_BASE;

bool SearchStringInFlashConfigSpace(unsigned char *string, unsigned char *BeginOfMemory, unsigned int SizeOfMemory, unsigned int *offset );
unsigned int SizeOfString(unsigned char *string);

bool LookupParameterAccordingToKey(unsigned char *key, unsigned int *offset)
{
    if(!SearchStringInFlashConfigSpace(key, flash_config_base, CONFIG_SPACE_SIZE,offset))
    {
        return false;
    }
    else
    {
        return true;
    }
      
}

/*
 *      Function : Get the end pointer of string in memory. 
 *
 *  Return value : The pointer of string end, if the string can be searched in the memory.
 *                 NULL, if the string can not searched in the memory.
 */
bool SearchStringInFlashConfigSpace
	(unsigned char *string, 
	 unsigned char *BeginOfMemory, 
         unsigned int SizeOfMemory,
         unsigned int *offset
        )
{
    unsigned int st = 0;
    unsigned char *ptr;
    unsigned int i=0,j=0;
    unsigned len = SizeOfString(string);
    if(len == 0) 
        return false;
    
    for(i=0;i<(CONFIG_SPACE_SIZE-len-1);i++)
    {
        ptr = (unsigned char *)( BeginOfMemory+i);
        for(j=0;j<len;j++)
        {      
            if(*(ptr+j) != *(string+j))
                break;  
        }
        if(j == len) 
        {
            *offset = (i+len+1);
            return true;
        }
    }
    
    return false;
}

unsigned int SizeOfString(unsigned char *string)
{
    unsigned int len=0;
    unsigned char *ptr = string;
    while(*ptr++)
        len++;
    return len;
}

int GetMac(unsigned char *key, unsigned char address[6])
{
    unsigned int  tmp, temp;
    if(LookupParameterAccordingToKey(key, &tmp))
    {
        address[0] = *(flash_config_base + tmp); 
        address[1] = *(flash_config_base + tmp+1); 
	 address[2] = *(flash_config_base + tmp+2);
	 address[3] = *(flash_config_base + tmp+3);
	 address[4] = *(flash_config_base + tmp+4);
	 address[5] = *(flash_config_base + tmp+5);
        return 0;
    }
    else
        return  -1;
    	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -