|
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 2 2008, 14:56
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 3-09-06
Из: Архангельск
Пользователь №: 20 038

|
Приветики! С Новым Годом!!! Посмотрите вот этот FAQ - возможно поможет....Это что касается самого WinAVR. Только есть досадный нюанс - текст на чисто немецком.... Файл
|
|
|
|
|
Jan 2 2008, 19:28
|
Участник

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

|
Цитата(mdmitry @ Jan 2 2008, 21:09)  В документации к WinAvr есть FAQ, в том числе и про volatile, размещение данных во flash и другое написано, правда на английском.  Оо спасибо большое, я просто не знал про этот FAQ ПС мои массивы заработали Еще вот у меня перегрузка функций и объявление переменных в операторах не прокатывает. А вот про volatile так и не нашел(
Сообщение отредактировал Dim_ON - Jan 2 2008, 19:52
|
|
|
|
|
Jan 2 2008, 19:56
|
Участник

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

|
Цитата(Сергей Борщ @ Jan 2 2008, 22:48)  Телепатически можно предположить, что вы что-то не то пишете в исходном коде. ну например: Код void motor_go(u08 speed); void motor_go(u08 speed, u08 kol_shagov); for(u08 i = 0; i < 10; i++){} Еще интересует можно ли использовать конструкторы и деструкторы для структур и перегружать их
Сообщение отредактировал Dim_ON - Jan 2 2008, 20:05
|
|
|
|
|
Jan 2 2008, 21:47
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(Dim_ON @ Jan 2 2008, 23:56)  ну например: Код void motor_go(u08 speed); void motor_go(u08 speed, u08 kol_shagov); for(u08 i = 0; i < 10; i++){} Еще интересует можно ли использовать конструкторы и деструкторы для структур и перегружать их Простите, Вы уже с массивами разобрались? Не плодите дополнительных сущностей и вопросов, с декларированным Вами знанием языка 'C' за конструкторами и деструкторами через пару месяцев приходите. А приведенном примере расскажите словами, что хотели сделать. Я не понимаю.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Jan 3 2008, 07:29
|
Участник

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

|
Цитата(Dog Pawlowa @ Jan 3 2008, 00:47)  Простите, Вы уже с массивами разобрались? Не плодите дополнительных сущностей и вопросов, с декларированным Вами знанием языка 'C' за конструкторами и деструкторами через пару месяцев приходите. А приведенном примере расскажите словами, что хотели сделать. Я не понимаю. Да, с массивами разобрался... Хочу использовать одно имя функции, с разным количеством аргументов, или разными типами аргументов Хочу объявлять переменные не вначале функции, а внутри операторов Код switch(u08 temp = getchar()) {} Но впринцепе, если перегрузка не работает, то про конструкторы вопрос отпадает Цитата(mdmitry @ Jan 3 2008, 01:38)  Кажется, первый вопрос в FAQ по avr-libc именно по volatile. Код uint8_t flag; ... ISR(SOME_vect) { flag = 1; } ...
while (flag == 0) { ... } Компилятор будет обычно получать доступ к флагу только однажды, и оптимизирует дальнейшие пути полного доступа, так как его code path analysis(анализ нахождения кода) показывает, что ничто в цикле не могло изменить, так или иначе, состояние флага. Сказать компилятору, что эта переменная могла быть изменена вне ее code path analysis(анализа нахождения кода) (т.е. изнутри обычного прерывания), переменная должна быть объявлена: Код volatile uint8_t flag; Для этих целей я использовал extern переменные и все работает...в чем разница? Заметил, что при объявлении extern переменных необходимо сразу их определять, иначе памяти под них не выделяется и в дальнейшем компилятор их не находит. Цитата(Б. Керниган, Д. Ритчи @ Jan 3 2008, 01:38)  Поскольку внешние(extern) переменные доступны всюду, их можно использовать в качестве связующих данных между функциями как альтернативу связей через аргументы и возвращаемые значения. Для любой функции внешняя переменная доступна по ее имени, если это имя было должным образом объявлено. По умолчанию одинаковые внешние имена, используемые в разных файлах, относятся к одному и тому же внешнему объекту (функции). (В стандарте это называется редактированием внешних связей (линкованием) (external linkage).) ...... Если же программа расположена в нескольких исходных файлах и внешняя переменная определена в файле1, а используется в файле2 и файлеЗ, то объявления extern в файле2 и файлеЗ обязательны, поскольку необходимо указать, что во всех трех файлах функции обращаются к одной и той же внешней переменной. На практике обычно удобно собрать все объявления внешних переменных и функций в отдельный заголовочный файл.
Сообщение отредактировал Dim_ON - Jan 3 2008, 08:07
|
|
|
|
Сообщений в этой теме
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        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 Подскажите плиз
Как в avr-gcc обращаться к младшем... Jan 5 2008, 15:12 Сергей Борщ Цитата(Dim_ON @ Jan 5 2008, 17:12) Как в ... Jan 5 2008, 17:13  Dim_ON Цитата(Сергей Борщ @ Jan 5 2008, 20:13) К... Jan 5 2008, 17:18  zltigo Цитата(Сергей Борщ @ Jan 5 2008, 19:13) И... Jan 5 2008, 18:41   Сергей Борщ Цитата(zltigo @ Jan 5 2008, 20:41) Ну а
... Jan 5 2008, 19:03    zltigo Цитата(Сергей Борщ @ Jan 5 2008, 21:03) в... Jan 5 2008, 19:57     Сергей Борщ Цитата(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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|