我面临一个非常奇怪的问题。
- 我有if条件:
if((IN_SYNC == sync_flag) || (cycle_number == spi_slot_number))
在条件之前,变量" spi_slot_number"是' 7'在if条件之后,它转向了' 0' 0 (这是" cycle_number&#34的值;)!!!
有谁知道这样的事情怎么会发生?!
重要说明:
1-我的代码是用C语言编写的。
2-我在条件之前和之后检查了堆栈,以确保没有发生堆栈损坏。
3-我的程序是一个线程程序,因此没有中断或其他线程可以中断。
4-如果我评论if条件,那么一切都很顺利。
5-我不知道如何生成汇编代码...
答案 0 :(得分:2)
正如其他人所说,您还没有分享足够的代码来实际识别您的问题所在。然而,我想到的一个想法是IN_SYNC
标识符。将宏放在所有大写字母中是一种标准的编码惯例,如果它是一个宏,那么它可能会做出肮脏的行为。检查IN_SYNC
。
另一件事 - 您的if
测试有两个测试,由||分隔运营商。尝试分开两个测试,看看哪一个导致你的副作用。像这样:
printf("%d \n", spi_slot_number);
if (IN_SYNC == sync_flag) {
/* do nothing */
}
printf("after IN_SYNC test %d \n", spi_slot_number);
if (cycle_number == spi_slot_number) {
/* do nothing */
}
printf("after cycle_number test %d \n", spi_slot_number);
答案 1 :(得分:1)
如果您对spi_slot_number的临时副本进行比较会发生什么?它是否按预期工作?
void GetData(slot_id_T spi_slot_number, uint8_t* data_received,
uint16_t data_length, uint8_t data_is_valid_flag)
{
uint8_t cycle_number;
slot_id_T copy = spi_slot_number; // <- ADDED
cycle_number = GetCycleNumber() + 1;
if(cycle_number > LAST_CYCLE)
{
cycle_number = 0;
}
printf("%d \n", spi_slot_number);
if((IN_SYNC == sync_flag) || (cycle_number == copy)) // <- CHANGE
{
printf("%d \n", spi_slot_number);
switch(data_is_valid_flag)
{
case DATA_IS_VALID:
SendData(spi_slot_number, p_buffer, data_length);
break;
case DATA_IS_NOT_VALID:
IndicateDataNotValid(spi_slot_number, p_buffer, data_length);
break;
default:
/* Do Nothing */
break;
}
}
}