我正在尝试通过Ulab从Matlab将包含HEX字符的文件中的数据复制到我的嵌入式设备的SRAM内存中。问题是我不知道如何使程序停止将任何收到的字符视为特殊命令。
例如:符号''根据ASCII表具有等效于0x20的HEX。但是,我的数据可能会在某处出现这个0x20。所以,我不能用它作为我程序的分隔符。
请建议我一种方法,可以在不引起任何此类问题的情况下读取hex文件中的所有数据。
这是我的代码的一部分。
memcpy(((uint8_t*)(SRAM_BASE+i)),&cThisChar,1);
UARTCharPut(UART0_BASE, cThisChar);
i++;
//
// Stay in the loop until either a CR or LF is received.
//
}
while((cThisChar != '\n') && (cThisChar != '\r')); // this is where the problem happens!
那么我应该为while循环设置一个条件,以便接受所有字符?
谢谢!
答案 0 :(得分:0)
不要试图通过其内容获取文件结尾。 获取它的大小并使用计数器。
FILE *fp = NULL;
long int fsize = 0;
long int fptr = 0;
/* Open file. */
/* todo: Open file here. */
/* Get file size. */
fseek(fp, 0L, SEEK_END);
fsize = ftell(fp);
fseek(fp, 0L, SEEK_SET);
/* Process file data. */
while (fptr < fsize) {
/* todo: Do your stuff here. */
++fptr;
}
/* Close file. */
/* todo: Close file here. */
答案 1 :(得分:0)
基本上,这就是我想要实现的目标!不管怎样,谢谢你的努力!
signed char cThisChar;
while (cThisChar != EOF);
答案 2 :(得分:0)
我发布了解决方案。
while (j < 2048)
{
do
{
//
// Read a character using the blocking read function. This function
// will not return until a character is available.
//
cThisChar = UARTCharGet(UART0_BASE);
//
// Write the same character using the blocking write function. This
// function will not return until there was space in the FIFO and
// the character is written.
//
memcpy(((uint8_t*)(SRAM_BASE+i)),&cThisChar,1);
UARTCharPut(UART0_BASE, cThisChar);
i++;
//
// Stay in the loop until either a CR or LF is received.
//
} //while((cThisChar != '\n') && (cThisChar != '\r'));
while (i<17);
j++;
}
这是微控制器方面代码的一部分。经过反复迭代,我发现使用16的缓冲区值是最好的选择。 j是外循环计数器= 32768/16 = 2048.通过这个我可以写入16字节包中的所有32768字节。
现在相应的MATLAB版代码:
while(true)
txdata = fread(A,**16**,'uint8','ieee-be');
%[my_count_rows, my_count_columns]=size(txdata);
%Convert to decimal format
%txdata_dec = hex2dec(txdata);
%Write using the UINT8 data format
**fwrite(obj1,txdata(1:16),'uint8');**
if txdata > 32768
break;
end
end