定义值不能在函数中改变

define value couldnt change in function

我想更改 TORQUE_HWORD 和 TORQUE_LWORD 调用函数时的全局定义 如果我调用了。我该怎么做?

我正在这样尝试:

uint16_t mAddressArray[10];
 #define TORQUE_HWORD mAddressArray[5]
#define TORQUE_LWORD mAddressArray[6]
void changeValue()
{
 Write_EEPROM_Define(torque, TORQUE_HWORD, TORQUE_LWORD); // Current Limit
 printf("A: %04x B: %04x ", TORQUE_HWORD, TORQUE_LWORD); // I see this value 0000 0000 
}
void Write_EEPROM_Define( float value, uint16_t eepromHValue, uint16_t eepromLValue)
{
 eepromHValue = 0xAA;
 eepromLValue = 0XBB;
}

这里的主要问题是您按值传递数组项,因此您不会更改原始数组。而这个问题是由于在访问数组时使用了误导性的宏造成的。

其他问题是void changeValue()是过时的样式,应该是void changeValue (void)。并且函数 Write_EEPROM_Define 命名错误,我希望这样的函数能够执行对 EEPROM 的实际写入。

所有这些问题都可以这样解决:

uint16_t mAddressArray[10];
#define TORQUE_HWORD_INDEX 5
#define TORQUE_LWORD_INDEX 6

void changeTorque (float value, uint16_t array[10], uint16_t hi_index, uint16_t lo_index)
{
  array[hi_index] = 0xAA;
  array[lo_index] = 0xBB;
}

void changeValue (void)
{
  changeTorque(torque, mAddressArray, TORQUE_HWORD_INDEX, TORQUE_LWORD_INDEX);
  printf("A: %04x B: %04x ", mAddressArray[TORQUE_HWORD_INDEX], mAddressArray[TORQUE_HWORD_INDEX]);
}

至于为什么你把这个数组作为一个全局变量,却在同一个文件中的函数之间传递它,我不知道。这只是奇怪的程序设计,您或许应该将其设为某个函数中的局部 static 变量。