【发布时间】:2017-09-24 06:36:47
【问题描述】:
我的代码中有一个非常微不足道但似乎很难修复的错误。长话短说,当我从芯片读取数据值时,我有一个数组,其中充满了信息。这个名为data_buffer 的数组然后以一种十六进制文件格式将每个字符发送到UART 以进行调试。
当我键入命令并将字符输出到终端时,数组会为我指定有数据的空格吐出空字符。
代码如下,我尽量按顺序排列:
void read_256_address(void)
{
char SFRPAGE_SAVE=SFRPAGE;
SFRPAGE=CONFIG_PAGE;
RFLAG=0;
address_sum=((unsigned long)address_byte3<<16)
+((unsigned long)address_byte2<<8)
+((unsigned long)address_byte1);
if(chip_byte>=0 && chip_byte<=76)
{
Port4=chip_byte;
read_address_loop();
}
while(RFLAG==0){if(RFLAG==1){break;}}
SFRPAGE=SFRPAGE_SAVE;
}
void read_address_loop(void)
{
unsigned long int i=14;
char SFRPAGE_SAVE=SFRPAGE;
SFRPAGE=CONFIG_PAGE;
RFLAG=0;
if(command_byte==0x82)
{
write_P4();
for(next_address=address_sum;next_address<(address_sum+256);next_address++)
{
output_address();
read_op();
hex_data=data_read;
HEXtoASC();
data_buffer[i]=msb;i++;
data_buffer[i]=lsb;i++;
data_buffer[i]=' ';i++;
if(next_address+=15){format_data_dump();}
}
}
void output_data(void)
{
unsigned char i;
for(i=0;i<65;i++)
{
send_byte(data_buffer[i]);
}
}
对于for loop 上的缩进,我深表歉意,但这是由于格式问题。它应该与上面的write_P4(); 代码对齐。当上面的代码运行时,它会输出所需的格式而不是值,例如:
M82 1B 104560 FF ****null char for remaining indices**** 0x0D 0x0A
M82 1B 104560 FF FF ****null char for remaining indices**** 0x0D 0x0A
M82 1B 104560 FF FF FF ****null char for remaining indices**** 0x0D 0x0A
我期望看到的如下:
M82 1B 1040560 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0x0D 0x0A
M82 1B 1040570 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0x0D 0x0A
.
.
.
M82 1B 1040650 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 0x0D 0x0A
有人可以告诉我为什么会发生这种情况吗?似乎整个缓冲区的每次迭代后缓冲区的长度都在增加,而不是每次都相同。
【问题讨论】:
-
else if(command_byte==0x82)没有找到if(你可能在某处犯了剪切和粘贴错误) -
@wildplasser 我为那个声明道歉。在我之前的实际代码中有一个匹配的
if语句。我只是为了在问题中压缩我的代码而将其排除在外。我知道这会如何引起混乱。 -
您对
if (next_address+=15)的意图是什么?next_address += 15添加了15,但它的计算结果始终为true,当您在两个位置更改for循环变量时会令人困惑。你的意思是像next_address % 16 == 15这样的东西吗?我会说代码的功能相当复杂。你怎么样1)在一个函数中将数据读入一个特定长度的数组,然后2)在第二个函数中将数组的内容转储到一个十六进制字符串中?这比这更容易测试(和推理)。 -
@Groo 我的意图是让
for循环增加next_address15 次,当第15 次到来时,这将填满data_buffer并将其发送到终端。所以我应该看到 16 行数据来自 16 个地址。这就是我得到的,但我得到的是null char而不是FF。我希望这是有道理的。我可能已经解释过,到处都有 -
@Groo 我还没有尝试过模运算。 Brb 与结果
标签: c arrays function loops 8051