来自UART的数据更新数组

时间:2017-11-22 15:58:31

标签: c microcontroller pic mplab xc8

希望有人可以帮助我。相当新的C(来自PHP背景),现在几天都遇到了这个问题。仍然试图掌握指针等,这是PHP无法实现的快乐。

所以基本上,我希望能够将数组中的特定值更新为通过UART给出的值。 UART都正常工作。只是无法让代码工作来更新数组。来自UART的数据将在字符串“uart”中。在下面的代码中,将具有值' 0430' (前2位数字表示数组键,第2位数字是更新它的值。)

// Array values
int unsigned array[15] = {05,76,33,02,11,07,34,32,65,04,09,32,90,03,44};

// Split the UART string into required parts
// Array Key
int key;
memcpy (key, &uart[0], 2);
// New Value
int value;
memcpy (value, &uart[2], 2);

array[key] = value; // Im sure this is wrong and needs to be done via a pointer?

新数组现在应该是:     {05,76,33,02,30,07,34,32,65,04,09,32,90,03,44};

任何建议都会很棒,即使是简短的解释也能帮助我理解。

提前致谢

1 个答案:

答案 0 :(得分:3)

你不能简单地从字符串" 04"中复制两个字节。到int变量并期望它包含4.你需要转换字符串" 04"进入值4,例如使用atoi

你想要这个:

  char uart[] = "0430";   // made up uart buffer just for debugging
  char temp[3] = { 0 };   // buffer for 2 char string, all 3 bytes initialized to 0

  temp[0] = uart[0];
  temp[1] = uart[1];      // temp contains now "04"

  int key = atoi(temp);   // convert from string to integer, key now contains 4

  temp[0] = uart[2];      
  temp[1] = uart[3];      // temp contains now "30"

  int value = atoi(temp); // convert from string to integer, value now contains 30