项目背景
VS版本:
关键代码
是使用了FLASH抽象层FAL模块,在windows上用文件模拟FLASH,实现抽象层的接口。
static int flash_init(void)
{
int iDummy = -1;
char szFlashFileName[MAX_PATH] = { 0 };
// 获取路径及文件名
GetCfgFilePathName(szFlashFileName, MAX_PATH, FAL_FLASH_FILE_NAME);
// 如果文件存在,则打开
g_pFile = fopen(szFlashFileName, "rb+");
// 如果文件不存在,则创建
if (g_pFile == NULL)
{
g_pFile = fopen(szFlashFileName, "wb+");
if (g_pFile == NULL)
{
return -1;
}
// 新文件全部写0xFF
for (size_t i = 0; i < FAL_FLASH_CAPACITY_SIZE / sizeof(int); i++)
{
fwrite(&iDummy, sizeof(int), 1, g_pFile);
}
fflush(g_pFile);
}
// 如果以前的文件太小
fseek(g_pFile, 0, SEEK_END);
long filesize = ftell(g_pFile);
if (filesize < FAL_FLASH_CAPACITY_SIZE)
{
fseek(g_pFile, 0, SEEK_END);
for (size_t i = filesize; i < FAL_FLASH_CAPACITY_SIZE; i++)
{
fwrite(&iDummy, 1, 1, g_pFile);
}
fflush(g_pFile);
}
return 0;
}
问题现象
运行结果,不如人意。
开启单步调试:
实际文件是存在的。
执行完第86行,打开文件,明明是成功的,g_pFile的值不是0。
但是,下一条指令,并不是第89的比较,而是跑到第90行了,然后继续往下执行,
并且,执行到注释去了!
分析过程
这个现象明显不对嘛。
怀疑是不是文件没有编译,对应的调试信息还是旧的。把整个工程重新编译一下。
问题现象依旧。
怀疑是不是注释有什么问题
修改一下注释吧,在“则创建”的后面加了个省略号。。。
再次调试:
咦,这次没有进到if里面,而是跳到了第109行!
问题是,第109行也是个空行啊!
再次修改注释:在107行的注释后面也加个省略号试试。。。
编译后重试,
哎呀,这次对上了!
问题原因
肯定是跟中文注释有关嘛
解决措施
为了避免类似问题再次发生,就写了个python脚本,把所有代码由utf-8格式转换为ANSI编码了。