В настоящее время у меня есть простая программа, которая устанавливает фрейм-буфер, в который можно записывать.
Я сталкиваюсь с поведением, когда значения, хранящиеся в массивах, после извлечения возвращаются как кажущиеся случайными значениями, без связи с оригиналами.
Я также заметил несколько странное и неожиданное поведение операторов switch - я подозреваю, что это как-то связано с тем, как массивы и операторы switch статически размещаются в памяти.
В качестве примера, здесь у меня есть некоторый код, который должен рисовать жестко закодированное число, а затем 7 других жестко закодированных чисел, которые были сохранены в массиве:
unsigned int cols[7] = { 0xFFFF0000, 0xFFFF7F00, 0xFFFFFF00, 0xFF00FF00, 0xFF0000FF, 0xFF4B0082, 0xFF9400D3 };
drawNum(&display, 0x1234ABCD);
for (int i=0; i<7; i++)
drawNum(&display, cols[i]);
Первый drawNum()
вызов с жестко заданным значением работает нормально, но все вызовы с доступом к массиву дают на первый взгляд случайные результаты.
Назначение значений массива во время выполнения не имеет этой проблемы, например:
unsigned int cols[7];
cols[0] = 0xFFFF0000;
cols[1] = 0xFFFF7F00;
cols[2] = 0xFFFFFF00;
cols[3] = 0xFF00FF00;
cols[4] = 0xFF0000FF;
cols[5] = 0xFF4B0082;
cols[6] = 0xFF9400D3;
drawNum(&display, 0x1234ABCD);
drawNum(&display, (int)cols);
for (int i=0; i<7; i++)
drawNum(&display, cols[i]);
Я также столкнулся с непредсказуемым поведением при возврате значений из операторов switch
.
Не могу сказать точно, но это заставляет меня поверить, что это проблема с используемым компилятором или компоновщиком - я использую arm-none-eabi
.