|
WinAVR организация данных, Вопросы начинающего |
|
|
|
Jan 2 2008, 11:17
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 28-09-07
Пользователь №: 30 914

|
Недавно начал учиться программировать МК 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 раз переписывать одно и тоже. Ссылки на литературу по теме приветствуются
|
|
|
|
|
 |
Ответов
|
Jan 5 2008, 15:12
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 28-09-07
Пользователь №: 30 914

|
Подскажите плиз Как в avr-gcc обращаться к младшему и старшему байту слова, без использования функций преобразования типов? Есть ли какие ниб специальные средства, типа: Код unsigned int KeyCod = 0xFFFF; unsigned char KeyRow = Hbyte(KeyCod); unsigned char KeyCol = Lbyte(KeyCod); ........ ........ if(Hbyte(KeyCod) != KeyRow){....} if(Lbyte(KeyCod) != KeyCol){....} ROWPORT = Hbyte(KeyKod); //или надо все же использовать функции преобразования? unsigned int KeyCod = 0xFFFF; unsigned char KeyRow = utoa(KeyCod>>8); unsigned char KeyCol = utoa(KeyCod); .......
Сообщение отредактировал Dim_ON - Jan 5 2008, 15:14
|
|
|
|
|
Jan 5 2008, 17:13
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Dim_ON @ Jan 5 2008, 17:12)  Как в avr-gcc обращаться к младшему и старшему байту слова, без использования функций преобразования типов? Код uint16_t a; uint8_t lo_byte, hi_byte;
void test() { lo_byte = a & 0xFF; hi_byte = a >> 8; } И так в любом С.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 5 2008, 18:41
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Сергей Борщ @ Jan 5 2008, 19:13)  И так в любом С. Ну если для определенности: lo_byte = (uint8_t)a; это правильно. lo_byte = a; это нормально. Ну а lo_byte = a & 0xFF; явный перебор. Компияторы нынче хорошие - оптимизируют, конечно....
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 5 2008, 19:57
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Сергей Борщ @ Jan 5 2008, 21:03)  выдают предупреждение о присваивании большего типа меньшему. GCC, во всяком случае. Не должно быть warnings. Относительно GCC/C++ - перепроверил 4.2.1 с полными ключами -Wall -Wextra как и положено сделал преобразование типов lo_byte = a; без предупреждений.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
Dim_ON WinAVR организация данных Jan 2 2008, 11:17 bloodden Вся проблема в том, что у АВР память программ и па... Jan 2 2008, 11:46 Dim_ON Цитата(bloodden @ Jan 2 2008, 15:46) По-м... Jan 2 2008, 12:04  Dim_ON Микроконтроллеры AVR семейства MEGA имеют RISC (со... Jan 2 2008, 13:34   zltigo Цитата(Dim_ON @ Jan 2 2008, 15:34) Не я п... Jan 2 2008, 13:44    Dim_ON Цитата(zltigo @ Jan 2 2008, 17:44) Вот им... Jan 2 2008, 14:13     zltigo Цитата(Dim_ON @ Jan 2 2008, 16:13) Давайт... Jan 2 2008, 14:38 mdmitry >PS Хочется услышать советы бывалых при использ... Jan 2 2008, 13:10 733259 Вам сначала руководство по C бы почитать, про масс... Jan 2 2008, 13:38 Dmitry77 Приветики! С Новым Годом!!!
Посмот... Jan 2 2008, 14:56 mdmitry Цитата(Dmitry77 @ Jan 2 2008, 17:56) Прив... Jan 2 2008, 18:09  Dim_ON Цитата(mdmitry @ Jan 2 2008, 21:09) В док... Jan 2 2008, 19:28   Сергей Борщ Цитата(Dim_ON @ Jan 2 2008, 21:28) Еще во... Jan 2 2008, 19:48    Dim_ON Цитата(Сергей Борщ @ Jan 2 2008, 22:48) Т... Jan 2 2008, 19:56     Dog Pawlowa Цитата(Dim_ON @ Jan 2 2008, 23:56) ну нап... Jan 2 2008, 21:47      Dim_ON Цитата(Dog Pawlowa @ Jan 3 2008, 00:47) П... Jan 3 2008, 07:29       Dog Pawlowa Цитата(Dim_ON @ Jan 3 2008, 11:29) Для эт... Jan 3 2008, 08:09        Dim_ON Цитата(Dog Pawlowa @ Jan 3 2008, 11:09) e... Jan 3 2008, 08:16         Dog Pawlowa Цитата(Dim_ON @ Jan 3 2008, 12:16) Я прав... Jan 3 2008, 09:12          Dim_ON Цитата(Dog Pawlowa @ Jan 3 2008, 12:12) Н... Jan 3 2008, 09:29           Dog Pawlowa Цитата(Dim_ON @ Jan 3 2008, 13:29) Я знаю... Jan 3 2008, 09:57            Dim_ON Цитата(Dog Pawlowa @ Jan 3 2008, 12:57) У... Jan 3 2008, 10:34       Сергей Борщ Цитата(Dim_ON @ Jan 3 2008, 09:29) Но впр... Jan 3 2008, 10:41        Dim_ON Цитата(Сергей Борщ @ Jan 3 2008, 13:41) П... Jan 3 2008, 10:55   mdmitry Цитата(Dim_ON @ Jan 2 2008, 22:28) А вот ... Jan 2 2008, 22:38 vooon скорее всего вы компилируете Си компилятором а не ... Jan 3 2008, 11:25 Dim_ON Цитата(vooon @ Jan 3 2008, 14:25) скорее ... Jan 3 2008, 11:37  vooon да, тогда будут доступны все возможности С++ Jan 3 2008, 11:56 Сергей Борщ Цитата(vooon @ Jan 3 2008, 13:25) наверня... Jan 3 2008, 14:23  mdmitry Цитата(Сергей Борщ @ Jan 3 2008, 17:23) Д... Jan 3 2008, 21:46 Dim_ON Всем спасибо за подсказки
Пока вроде вопросы з... Jan 3 2008, 12:06  Dim_ON Цитата(Сергей Борщ @ Jan 5 2008, 20:13) К... Jan 5 2008, 17:18     Сергей Борщ Цитата(zltigo @ Jan 5 2008, 21:57) Не дол... Jan 5 2008, 21:49      zltigo Цитата(Сергей Борщ @ Jan 5 2008, 23:49) н... Jan 5 2008, 22:17 Dim_ON Еще можно наверное вот так:Кодuint16_t KeyCod;
uin... Jan 5 2008, 18:43 Dim_ON Еще возник вопрос:
создаю в EEPROM-е массив структ... Jan 6 2008, 10:31 Сергей Борщ Цитата(Dim_ON @ Jan 6 2008, 12:31) eeprom... Jan 6 2008, 12:47
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|