Битовая маскировка индекса в массив, среда Arduino - PullRequest
1 голос
/ 17 июля 2009

Я пытаюсь взять 16-битное целое число без знака из структуры, замаскировать его первые 8 битов и использовать его в качестве индекса для массива с помощью функции analogWrite, которая принимает выводной вывод на Arduino и вывод Байт в качестве аргументов. Данный код выглядит примерно так: analogWrite(outputPin, my_array[myStructure->data & 0xFF00 >> 8]);

К сожалению, этот код не работает. Я всегда получаю ноль в качестве выхода. Есть идеи?

Ответы [ 3 ]

5 голосов
/ 17 июля 2009

Приоритет оператора .

Это:

myStructure->data & 0xFF00 >> 8

Эквивалентно:

myStructure->data & (0xFF00 >> 8)

Но вы хотите:

(myStructure->data & 0xFF00) >> 8
3 голосов
/ 17 июля 2009

Я подозреваю, что приоритет оператора. Попробуйте:

analogWrite(outputPin, my_array[(myStructure->data & 0xFF00) >> 8]);
0 голосов
/ 17 июля 2009

Глядя на таблицу приоритетов для C, вы делаете следующее:

  1. Получить данные из myStructure
  2. Сдвиг вправо 0xFF00 8 шагов
  3. По битам и это с данными

    Используйте больше строк или скобок!

...