Недавно начал учиться программировать МК AVR семейство Mega, для этого использую WinAVR 20071221, тестирую в Proteuse 7 SP2. В чем собственно непонядки:
Проблемы с массивами:
Код
const unsigned char TabKey[4][4] PROGMEM = \
{{ '1', '2', '3', CTRL0 },\
{ '4', '5', '6', CTRL1 },\
{ '7', '8', '9', CTRL2 },\
{ '*', '0', '#', CTRL3 }};
//или
const u08 Tab[16] PROGMEM = \
{ 33, 0xFA, 16, CTRL0, \
48, 0xF9, 18, CTRL1, \
56, 0xF8, 13, CTRL2, \
69, 0xF7, 28, CTRL3 \
};
//использую внешний индекс
extern u08 LastKey;
//но возращаются левые выборки
LastKey = Tab[LastKey]; //лажа
Объясните плиз использование
static, extern, volatile переменных, функций. В каких случаях лучше объявить extern переменную, а где лучше использовать функцию возращающую значение static переменной. Про volatile я вообще ниче не знаю
С массивами тоже туго... Что лучше, использовать одномерный массив или при необходимости можно создавать несколько размерностей. Как правильно их объявлять и определять, как обращаться к элементам массива. Операции с массивами: логические, арифметические, сортировка...
Структуры(struct)...Объявление, определение, битовые поля, использование массива в структуре и использование массива структур
Объединения(union)...
Перечесления(enum)...
Динамическое выделение памяти...malloc...free
Объявление и определение переменных внутри операторов... for(u08 i = 0; i < 10; i++){}
Перегрузка функций
Шаблоны функций
PS Хочется услышать советы бывалых при использовании тех или инных типов данных
PSS Хочется разобраться как организуется тот или иной тип на аппаратном уровне, что бы корректно использовать
PSSS Сильно не ругайтесь если это все 1000 раз обсуждалось, просто захотелось собрать все в одном месте, можно ссылки если не хотите по 150 раз переписывать одно и тоже. Ссылки на литературу по теме приветствуются