📄 main.c
字号:
printf("Open file for write error.\n");
return -1;
}
result = fwrite((unsigned char *) addr, 1, len, dfile);
if (result != len)
{
printf("write to file error.\n");
return -1;
}
fclose(dfile);
if (len < 256)
{
for (i = 0; i < len; i++)
{
if (i % 16 == 0)
{
printf("\n");
printf("%x: ", addr + i);
}
memcpy((void *) &x, (const void *) (addr + i), 1);
printf("%02x ", x);
}
}
printf("\n");
return 0;
}
int Image2Hex(void)
{
int i, j, m, x, addr, num, len, result;
char str[10], buf[300], *buf1;
unsigned char * buf0;
FILE *dfile;
buf0 = (unsigned char *) malloc(800000);
if (buf0 == NULL)
{
printf("Not enough memory.\n");
return -1;
}
memset(buf0, 0, 800000);
buf1 = (char *) malloc(2000000);
if (buf1 == NULL)
{
printf("Not enough memory.\n");
return -1;
}
memset(buf1, 0, 2000000);
dfile = fopen("image.hex", "w");
if (dfile == NULL)
{
printf("Open file for write error.\n");
free(buf0);
free(buf1);
return -1;
}
memcpy((void *) &num, (const void *) FLASH_PROGRAM_ZIP_DATA_ADDR, 4);
if (num <= 0 || num > 100)
{
printf("Num error.\n");
free(buf0);
free(buf1);
fclose(dfile);
return -1;
}
addr = 4;
for (i = 0; i < num; i++)
{
memset(buf, 0, 256);
memcpy(buf, (const void *) (FLASH_PROGRAM_ZIP_DATA_ADDR + addr), 256);
addr += 256;
memcpy((void *) &x, (const void *) (FLASH_PROGRAM_ZIP_DATA_ADDR + addr), 4);
printf("%d : %s %d", i + 1, buf, x);
if (x % 4 != 0)
{
x = x + 4 - x % 4;
}
addr += 4 + x;
printf(", addr is %d\n", addr);
}
printf("\n\n");
m = 0;
len = addr;
memcpy((void *) buf0, (const void *) FLASH_PROGRAM_ZIP_DATA_ADDR, len);
for (i = 0; i < len + 32 - len % 32; i += 32)
{
buf[0] = 0;
sprintf(buf, "%x", FLASH_PROGRAM_ZIP_DATA_ADDR + i);
addr = i;
for (j = 0; j < 32; j++)
{
sprintf(str, "%02x", *((unsigned char *) (buf0 + addr)));
strcat(buf, " ");
strcat(buf, str);
addr++;
if (addr > len - 1)
{
break;
}
}
strcat(buf, "\n");
memcpy((void *) &buf1[m], (const void *) buf, strlen(buf));
m += strlen(buf);
}
printf("m = %d\n", m);
result = fwrite((unsigned char *) buf1, 1, m, dfile);
if (result != m)
{
printf("write to file error.\n");
free(buf0);
free(buf1);
fclose(dfile);
return -1;
}
free(buf0);
free(buf1);
fclose(dfile);
return 0;
}
void GetMainProgVersion(void)
{
int version;
memcpy((void *) &version, (const void *) (FLASH_PROGRAM_CHECK_ADDR + 20), 4);
if (version <0 || version> 100000)
{
printf("\n非法的版本号: %x\n", version);
}
else
{
printf("\n主程序当前版本为 :%x\n", version);
}
}
void GetEprom(void)
{
int len = 8 * 1024 - 4;
char fname[100];
static char strFlag[8 * 1024 + 1000];
FILE *dfile;
fname[0] = 0;
printf("请输入保存E2P的文件名 : ");
scanf("%s", fname);
if (strlen(fname) < 1)
{
return ;
}
memset(strFlag, 0, len + 1);
dfile = fopen(fname, "w");
if (dfile == NULL)
{
printf("Open %s for write error!\n", fname);
return ;
}
sysE2PROM->Read(sysE2PROM, 0, (u8 *) strFlag, (u32 *) &len);
fwrite((unsigned char *) strFlag, 1, len, dfile);
fclose(dfile);
return ;
}
void writeEprom(void)
{
int len = 8 * 1024 - 4;
char fname[100];
static char strFlag[8 * 1024 + 1000];
FILE *dfile;
fname[0] = 0;
printf("请输入要写入E2P的文件 : ");
scanf("%s", fname);
if (strlen(fname) < 1)
{
return ;
}
memset(strFlag, 0, len + 1);
dfile = fopen(fname, "r");
if (dfile == NULL)
{
printf("Open %s for read error!\n", fname);
return ;
}
fread((unsigned char *) strFlag, 1, len, dfile);
sysE2PROM->Write(sysE2PROM, 0, (u8 *) strFlag, (u32 *) &len);
fclose(dfile);
return ;
}
int SetProgramVer(void)
{
int version;
printf("Please input new version : ");
scanf("%x", &version);
sysFlash->Write(sysFlash, FLASH_PROGRAM_CHECK_ADDR + 20 - FLASH_START_ADDR, 4, (void *) &version);
return 0;
}
int SetSTBSequenceID(void)
{
int sid;
printf("Please input new sequence id : ");
scanf("%d", &sid);
sysFlash->Write(sysFlash, FLASH_FONT_ADDR + FLASH_FONT_SIZE - sizeof(STBVER) + 64 - FLASH_START_ADDR, 4, (void *) &sid);
return 0;
}
static int ReadDataInFlash2File()
{
int result, len, address;
char filename[100];
FILE *dfile;
printf("\nPlease input address(in hex) : ");
scanf("%x", &address);
printf("\n");
printf("\nPlease input length : ");
scanf("%d", &len);
printf("\n");
printf("\nPlease input filename to save data : ");
scanf("%s", filename);
printf("\n");
dfile = fopen(filename, "wb");
if (dfile == NULL)
{
printf("Open %s to write error.\n", filename);
return -1;
}
result = fwrite((unsigned char *) address, 1, len, dfile);
if (result != len)
{
fclose(dfile);
printf("write to file error.\n");
return -1;
}
fclose(dfile);
return 0;
}
static int WriteDataInFile2FLash()
{
int result, address, blocksize = 65536;
char filename[100];
FILE *dfile;
unsigned char * buf;
printf("\nPlease input source filename : ");
scanf("%s", filename);
printf("\n");
printf("\nPlease input start address(in hex) : ");
scanf("%x", &address);
printf("\n");
buf = (unsigned char *) malloc(blocksize);
if (buf == NULL)
{
printf("malloc buf for %d error.\n", blocksize);
}
dfile = fopen(filename, "rb");
if (dfile == NULL)
{
free(buf);
printf("Open %s to read error.\n", filename);
return -1;
}
for (; ;)
{
result = fread(buf, 1, blocksize, dfile);
if (result > 0)
{
sysFlash->Write(sysFlash, address - FLASH_START_ADDR, result, buf);
address += result;
}
else
{
break;
}
}
free(buf);
fclose(dfile);
return 0;
}
void EraseSoftVersion()
{
DTVIA_FLASH_CONTENT Flash_Content;
memset((void *) &Flash_Content, 0xFF, sizeof(DTVIA_FLASH_CONTENT));
Flash_Content.stb_sequence_number = 0x123;
sysFlash->Write(sysFlash, FLASH_PROGRAM_CHECK_ADDR - FLASH_START_ADDR, sizeof(DTVIA_FLASH_CONTENT), (unsigned char *) &Flash_Content);
}
int Look_for_pos_of_bmp(void)
{
char BMP_NAME[256];
char zipname1[256];
int i, x, num, addr;
printf("Please Input the BMP Name:\n");
scanf("%s", BMP_NAME);
memcpy((void *) &num, (const void *) FLASH_PROGRAM_ZIP_DATA_ADDR, 4);
addr = 4;
for (i = 0; i < num; i++)
{
memset(zipname1, 0, 256);
sysFlash->Read(sysFlash, FLASH_PROGRAM_ZIP_DATA_ADDR + addr - FLASH_START_ADDR, 256, (unsigned char *) zipname1);
if (!strcmp(BMP_NAME, zipname1))
{
return (i + 1);
}
addr += 256;
memcpy((void *) &x, (const void *) (FLASH_PROGRAM_ZIP_DATA_ADDR + addr), 4);
if (x % 4 != 0)
{
x = x + 4 - x % 4;
}
addr += 4 + (int) x;
}
return 0;
}
void task1(void)
{
BOOL bExit = FALSE;
int command;
printf("\nProgamme Flash:\n");
while (!bExit)
{
printf("\n 0) Exit\n");
printf(" 1) Burn basic Program\n");
printf(" 2) Burn Font\n");
printf(" 3) Burn Main Program (.bin)\n");
printf(" 4) Burn Main Program (.prg)\n");
printf(" 5) 写入图片(压缩数据)\n");
printf(" 6) 写入图片(不压缩数据)\n");
printf(" 7) 读取图片数据\n");
printf(" 8) 删除图片\n");
printf(" 9) 列出FLASH中存储的图片\n");
printf("10) 取得FLASH映像\n");
printf("11) 将数组形式的图片数据存为二进制形式\n");
printf("12) 将映像文件写入FLASH\n");
printf("13) 显示FLASH中的数据(二进制形式)\n");
printf("14) 擦除芯片\n");
printf("15) 将图片数据转化为hex文件\n");
printf("16) 设置主程序版本号\n");
printf("17) 显示主程序版本号\n");
printf("18) 设置标识区信息\n");
printf("19) 显示标识区信息\n");
printf("20) 将版本信息转化为hex文件(保存于当前目录下的flag.hex文件中)\n");
printf("21) 得到e2p数据并写入文件中\n");
printf("22) 将文件里的数据写入E2P\n");
printf("23) 设置机顶盒序列号\n");
printf("24) 读取flash中的数据并存入文件中(例如可将图片数据读出并保存)\n");
printf("25) 将二进制数据写入flash中(例如可一次将所有图片数据写入flash中)\n");
printf("26) 清除版本信息\n");
printf("27) 查找图片在Flash中的位置\n");
printf("30) 烧写2M映像文件(TEST)\n");
printf("Command:");
scanf("%d", &command);
switch (command)
{
case 0:
bExit = TRUE;
break;
case 1:
burningbasic();
break;
case 2:
burningFont();
break;
case 3:
burningMainProgram();
break;
case 4:
burningMainProgramPrg();
break;
case 5:
burningZipdata(8);
break;
case 6:
burningZipdata(0);
break;
case 7:
GetZipData();
break;
case 8:
DeleteZipInFlash();
break;
case 9:
ListZipInFlash();
break;
case 10:
GetFlashMirrorImage();
break;
case 11:
WriteArrayToFile();
break;
case 12:
WriteFlashMirrorImage();
break;
case 13:
GetDataFromFlash();
break;
case 14:
flash_erase();
break;
case 15:
Image2Hex();
break;
case 16:
SetProgramVer();
break;
case 17:
GetMainProgVersion();
break;
case 21:
GetEprom();
break;
case 22:
writeEprom();
break;
case 23:
SetSTBSequenceID();
break;
case 24:
ReadDataInFlash2File();
break;
case 25:
WriteDataInFile2FLash();
break;
case 26:
EraseSoftVersion();
break;
case 27:
{
int temp;
if (temp = Look_for_pos_of_bmp())
{
printf("Find the BMP pos=%d\n", temp);
}
else
{
printf("Cant Find the BMP\n");
}
}
break;
case 30:
WriteFlashMirrorImage2M();
break;
default:
break;
}
}
if (sk_taskState(root_task) == TASK_STATE_SUSPENDED)
{
sk_taskResume(root_task);
}
}
int main(void)
{
u32 tick;
printf("Root task enter ... \n");
printf("image staradd:%x\n", FLASH_PROGRAM_ZIP_DATA_ADDR);
/*
* Initialize board
*/
sk_bspInit();
sk_bspStart();
/*
* Start OS
*/
//sk_osInit();
//sk_osStart();
sysE2PROM->Init(sysE2PROM, FALSE);
tick = sk_osGetTick();
printf("System tick ... %d\n", tick);
/*
* Create tasks
*/
if (sk_taskOpen(&tid1, "task1", 1, 4096, 0, (sk_Task) task1, NULL) != STATUS_OK)
{
printf("Task open for %s failed\n", "task1");
}
printf("Task '%s' created\n", "task1");
tick = sk_osGetTick();
printf("System tick ... %d\n", tick);
root_task = sk_taskId();
sk_taskSetPriority((sk_TaskID) NULL, 0);
if (sk_taskSuspend((sk_TaskID) NULL) < 0)
{
printf("Could not suspend\n");
}
tick = sk_osGetTick();
printf("System tick ... %d\n", tick);
sk_taskDelaymSec(1000);
printf("Root task exit!\n");
tick = sk_osGetTick();
printf("System tick ... %d\n", tick);
sk_osStop();
sk_osShutdown();
sk_bspStop();
sk_bspShutdown();
return (0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -