Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
13.09.2007, 12:09
|
|
Заблокирован
Регистрация: 31.03.2007
Сообщений: 129
Сказал спасибо: 6
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Программирование на Си в WinAVR
Может тема уже поднималась - я не встречал. У меня следующие вопросы по Си в WinAVR:
1. как задать пользовательскую переменную через register так, чтоб она определилась в регистре AVR, в каком - не важно, пусть компилятор сам выберет свободный, ведь не все регистры R0-R31 компилятор использует:
а. данная регистровая переменная должна быть видна глобально, т. е. ее должны видеть все модули программы;
б. данная регистровая переменная должна быть видна локально - только в одном модуле программы;
2. как задать битовую переменную (типа bool) которая должна находится в регистре R0-R31 на тех же условиях - чтоб была или глобальной или локальной.
Если возможно - подскажите с примером кода.
|
|
|
|
13.09.2007, 15:59
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Интересно, на что Вы рассчитываете, задавая такой вопрос - что Вам бросятся объяснять области видимости переменных ? Но ведь эта тема есть в ЛЮБЫХ учебниках по С. Что касаемо winavr, то это явно не самый популярный компилятор, к единственному достоинству которого относится бесплатность, так что примеров много не будет - народ использует либо коде вижион, либо иар.
Относительно того, можно ли объявить булевую переменную глобальной - то - поправьте, если я ошибаюсь - в большинстве компиляторов под МК - нет. Берем переменную char, объявляем ее как структуру из 8 бит в заголовочном файле и обращаемся соответственно.
|
|
|
|
13.09.2007, 16:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Сообщение от urry
|
Что касаемо winavr, то это явно не самый популярный компилятор, к единственному достоинству которого относится бесплатность
|
Ну уж и единственное... Отличный компилятор, кроме бесплатности обладает огромным количеством достоинств - кроссплатформенность, портирован почти под все ядра ( хотите AVR,ARM..AVR32 - в наличии и на заказ ), отличный оптимизатор... Продолжать можно долго. Что касается вопросов:
По первому пункту не знаю, но почему не устраивает конкретное указание регистра? Тогда
Код:
|
uint8_t register my_var asm("R14"); |
Область видимости в пределах модуля. Если требуется доступ из других, то там нужно переменную определить:
Код:
|
extern uint8_t register my_var asm("R14"); |
По второму пункту. В С нет битовых переменных, но есть битовые поля, что ничуть не хуже.
Код:
|
struct my_struct
{
uint8_t my_field: 1;
};
register struct my_struct super_var asm("r6");
...
super_var.my_field=0; // false
super_var.my_field=1; // true |
Область видимости как в первом примере.
|
|
|
|
13.09.2007, 19:13
|
|
Заблокирован
Регистрация: 31.03.2007
Сообщений: 129
Сказал спасибо: 6
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Спасибо откликнувшимся на мой вопрос. Поясняю для непонятливых - мне Си объяснять не нужно, я спрашивал конкретный пример синтаксиса задания переменной-регистра и переменной-бита в данной реализации Си - в WinAVR. Я работал с другими реализациями Си и для других ядер, для AVR часто использовал AlgorithmBuilder - там вообще нет проблем с заданием и переименованием регистров и их отдельных битов и какими их делать - локальными или глобальными.
ник. urry: ну не понравилась вам ветка - так не флудите в ней, молча пройдите.
ник. kison: спасибо за пример, попробую.
|
|
|
|
14.09.2007, 09:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Сообщение от zelen536
|
ну не понравилась вам ветка - так не флудите в ней, молча пройдите.
|
Гы. Если бы я прошел молча, то kison не обиделся бы за близкий его сердцу компилятор и ответ был бы Вам один - RTFM.
Кстати, использовать структуру как битовые переменные -
настолько элементарно, что заявление - "мне Си объяснять не нужно" - звучит, мягко говоря, странноватенько.
|
|
|
|
14.09.2007, 18:09
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Сообщение от zelen536
|
ник. urry: ну не понравилась вам ветка - так не флудите в ней, молча пройдите.
ник.
|
Вот этого я понять не могу, вы хотите услышать только то что хотите , или вам нужна консультация спеца ?
Если второе , то зачем хамить человеку разбирающемуся в вопросе ?
|
|
|
|
17.09.2007, 12:09
|
|
Заблокирован
Регистрация: 31.03.2007
Сообщений: 129
Сказал спасибо: 6
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Для ник. dosikus:
Был конкретный вопрос - от ник. kison был получен конкретный ответ - это норма для таких форумов. Давать оценки вопроса, автора и т. д. без выдачи хоть какого-то ответа - это флуд, чем и занимается ник. urry. Здесь собираются технари, априори мы все друг друга уважаем, ехидство, глупый сарказм и пустое бахвальство неприемлемы. Если человек открыл ветку, задал вопрос - значит его это в данный момент волнует и нормальный форумянин или конкретно отвечает или проходит мимо.
|
|
|
Сказали "Спасибо" zelen536
|
|
|
18.09.2007, 23:16
|
|
Прохожий
Регистрация: 29.06.2006
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Пожалуйста помогите. Как мне снаружи записать в порт что-либо.
Я программировал Atmega 8.
Код программы:
.......................
DDRB=0x00;
PORTB=0xff;
while(1)
{
if (PORTB!=0xff)
{
//Делать то-то....
}
}
.......................
что здесь не правильно.
Я пробовал замыкать ноги порта "B" на GND чере резюк 330 ОМ, но реакции на поставленное условие не наблюдалось
|
|
|
|
19.09.2007, 01:20
|
|
Гражданин KAZUS.RU
Регистрация: 29.06.2006
Сообщений: 638
Сказал спасибо: 37
Сказали Спасибо 56 раз(а) в 41 сообщении(ях)
|
Цитата:
|
что здесь не правильно.
|
1. сделали порт Б как выход
2. проверка производится не помощью PORTB, а с PINB
3. вы проверяете весь порт Б, все 8бит(чтобы выполнилось условие нужно будет все линии порта соединить на корпус)
4. слишком рано взялись за практику
|
|
|
|
19.09.2007, 01:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Достаточно поменять
на
и все заработает....
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:40.
|
|