Ситуация заключается в следующем.
Контроллер AVR Mega8, среда разработки CVAVR.
Имею 2 больших массива, размещенных во FLASH
const char symbol[3072]={...,...,... ... ... } //закодированные символы, 256 штук размером 8х12
const char str_array[44*27] = {...,...,... ... ... } //символьная строка для вывода в порт
...
//определяю 2 указателя для работы с этими массивами (чтобы работать с ними с максимальной скоростью)
const char * _ptr;
const char * _ptr1;
...
//далее в коде пишу
_ptr = &str_array[ххх]; //установить указатель в позицию ххх одного массива
_ptr1 = &symbol[ууу]; //установить указатель в позицию ууу второго массива
SPDR = *_ptr1 + (*_ptr*12); //здесь идет обращение к большому массиву через маленький, чтобы выбрать нужный байт
В итоге в порт выводится не то что нужно. Левак.
Чувствую, что работа с указателями у меня неверная в последней строчке написана ерунда. То есть в SPRD выводится совершенно не тот байт, что мне нужен.
Или может где-то можно по-русски почитать про указатели применительно к CVAVR ?
Совершенно аналогичное решение вопроса в WinAVR записано так:
SPDR = PRG_RDB(_ptr1 + (* _ptr++)*12);
На сколько я понимаю, эта функция позволяет считать байт по адресу в памяти, указанному суммой указателей. А как это же правильно записать в CVAVR ?

---------------------------
Сам задал вопрос, сам видимо и отвечаю...

Вот такая должна быть запись в CVAVR:
SPDR = *(_ptr1 + (* _ptr++)*12);
Непосредственно результат по указателю возвращается так: *(указатель) .
соответственно, моя ошибка была в том, что я неверно взял в скобки разные части выражения.
Никто ничего не добавит к моим умозаключениям...?
