К сожалению, я не очень силен в программировании, и видимо работа с указателями мне не до конца понятна...
Ситуация заключается в следующем.
Контроллер 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);Непосредственно результат по указателю возвращается так:
*(указатель) .
соответственно, моя ошибка была в том, что я неверно взял в скобки разные части выражения.
Никто ничего не добавит к моим умозаключениям...?
Сообщение отредактировал HCHUNTER - Dec 29 2007, 18:44