gpt4 book ai didi

C 结构问题

转载 作者:行者123 更新时间:2023-12-04 06:42:18 25 4
gpt4 key购买 nike

我一直在寻找这个问题的一些答案,但无法弄清楚。

我有一个结构:

typedef struct  {
BYTE hour;
BYTE minute;
BYTE second;
BYTE dom;
BYTE month;
BYTE year;
} t_time_date ;

并有串口接收功能:
g_curr_td.year = g_rx_buffer[3];
g_curr_td.month = g_rx_buffer[4];
g_curr_td.dom = g_rx_buffer[5];
g_curr_td.hour = g_rx_buffer[6];
g_curr_td.minute = g_rx_buffer[7];
g_curr_td.second = g_rx_buffer[8];

我已经验证了 g_rx_buffer是正确的并且包含数据。如果我将一个数字硬编码到变量中,它会起作用:
g_curr_td.year = 10;  /* this works */

但是,运行实时数据会崩溃,并且似乎正在内存中的其他位置写入数据。有人能看出我的设置有什么问题吗?

谢谢。

最佳答案

出于调试目的,您可以尝试创建一个函数,该函数接受所有结构成员的参数,例如:

/* Assumes g_curr_td is a global variable. */
void FillStruct( BYTE hour, BYTE minute, BYTE second, BYTE dom, BYTE month, BYTE year )
{
g_curr_td.year = year;
g_curr_td.month = month;
g_curr_td.dom = dom;
g_curr_td.hour = hour;
g_curr_td.minute = minute;
g_curr_td.second = second;
}

无论您是使用缓冲区中的值还是常量表达式,使用这样的函数都应该使汇编代码相同。如果它仍然崩溃,则可能是您的缓冲区有问题,即使您似乎已经检查了我能想到的处理缓冲区的所有角度。

您可以将此函数调用为 FillStruct( g_rx_buffer[3], g_rx_buffer[4], g_rx_buffer[5], g_rx_buffer[6], g_rx_buffer[7], g_rx_buffer[8] ) ,如果崩溃,将其称为 FillStruct( a, b, c, d, e, f ) ,其中 a、b、c、d、e 和 f 是原始参数或新的常量参数。尝试一次替换一个参数,看看它是否只是一个特定的字段失败,或者是否有任何字段失败。

编辑:另外,你的 typedef 到底是什么?或 #defineBYTE类型,您使用的是什么编译器和操作系统,以及您是否使用任何编译指示,例如将结构打包成字节对齐?

关于C 结构问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4090273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com