Нескольно простых вопросов о программировании AVR на Си.

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
DronVolk
Встал на лапы
Сообщения: 109
Зарегистрирован: Чт сен 03, 2015 15:52:10
Откуда: Сибирский федеральный округ

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение DronVolk »

Как определить фазу шим? Завожу таймер с делителем на 8 и нужно узнать в мк какое состояние сейчас на ножке лог 1 или 0. Не могу найти где флаг какой есть. Можно конечно определять по тому сколько натикал таймер и какое число заведено в шим но это как я понял тормозит схему сравнения таймера на 1 такт.

Pnjom-Penb писал(а):
DronVolk писал(а):введешь человека в заблуждение
Любезный, во-первых - я с Вами на брудершафт не пил, да и не выпью никогда, а потому - оставьте этот тон для соседей по двору.
А во-вторых, вводить в заблуждение - это скорее ляпнуть что-то категоричное, из серии:
DronVolk писал(а):Прерывание не может быть прервано ...
, не давая никаких пояснений, как будто это истина на все случаи жизни.


извиняюсь если обидел.
Когда мк входит в прерывание он запрещает их устанавливая (сбрасывая) флаг в регистре SREG по выходу из прерывания он вернет флаг командой reti. Если в обработчике не разрешается прерывание то он выполнится до конца и войдет в следующее прерывание если оно есть. Если установить флаг глобального прерывания в обработчике то он может быть прерван другим прерыванием и продолжить свое исполнение до другого прерывания (но это не есть гуд так как можно попортить стек).
я повелитель электронов! Но иногда появляются электроны бунтари и делают, что им вздумается, например, прокладывают новые пути движения...

"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение WiseLord »

А простое чтение из порта IO не работает?
Аватара пользователя
DronVolk
Встал на лапы
Сообщения: 109
Зарегистрирован: Чт сен 03, 2015 15:52:10
Откуда: Сибирский федеральный округ

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение DronVolk »

О благодарю))) попробую) Даже как то не думал.

работает чтение.
я повелитель электронов! Но иногда появляются электроны бунтари и делают, что им вздумается, например, прокладывают новые пути движения...

"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.
Аватара пользователя
tedikgb
Сёгун сайта
Сообщения: 524
Зарегистрирован: Сб дек 14, 2013 01:03:17
Откуда: РБ

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение tedikgb »

Здравствуйте, скажу сразу ничего в программировании не понимаю.
Но есть задача: разработчику требуется AVR-jtag для отладки. Использует в своих разработках вот этот камень ATmega162-16AU. Пользуется только средой программирования IAR.
Вопрос любой jtag можно приобрести для работ? например этот http://www.chipdip.ru/product/avr-jtag-usb/ (смущает, что написано для avr studio)
Кто понимает данный вопрос просьба написать в л.с. или сюда, какой jtag требуется. :shock:
Аватара пользователя
tedikgb
Сёгун сайта
Сообщения: 524
Зарегистрирован: Сб дек 14, 2013 01:03:17
Откуда: РБ

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение tedikgb »

Ни кто не знает?
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение Pnjom-Penb »

Видимо, Olimex'овские поделки здесь не так популярны. Ими торгует terraelectronica.ru; направьте разработчика на тамошний форум - если не участники, то сотрудники фирмы ответят.
Аватара пользователя
DronVolk
Встал на лапы
Сообщения: 109
Зарегистрирован: Чт сен 03, 2015 15:52:10
Откуда: Сибирский федеральный округ

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение DronVolk »

Можно ли использовать битовые поля при работе с регистрами?

просто есть разница например настройка таймера с шим через регистры

Код: Выделить всё

TCCR0A = (0<<COM0A1)|(0<<OM0A0)|(1<<COM0B1)(0<<COM0B0)(1<<WGM01)(1<<WGM00);
TCCR0B = (0<<FOC0A)|(0<<FOC0B)|(1<<WGM02)|(CS02)|(1<<CS01)|(0<<CS00);
TCNT0 = 0;
OCR0A = 220;
OCR0B = 110;


или через битовые поля

Код: Выделить всё

#define Disconnected 0
#define Toggle_on_Compare_Match 1
#define Clear_on_Compare_Match 2
#define Set_on_Compare_Match 3

typedef struct{
       char Compare_Match_A_Mode:2;
       char Compare_Match_B_Mode:2;
       char res0:2;
       char Waveform_Generation_Mode0:2;
       char FC_Compare_A:1;
       char FC_Compare_B:1;
       char res1:2;
       char Waveform_Generation_Mode1:1;
       char Clock_Select:3;
       char Timer_Counter_Register:8;
       char Compare_Register_A:8;
       char Compare_Register_B:8;
}Timer0_Setup;

Timer0_Setup *setup = (Timer0_Setup*)&TCCR0A;//они друг за другом идут поэтому сразу 5 захватим
setup->Compare_Match_A_Mode = Disconnected;
setup->Compare_Match_B_Mode = Set_on_Compare_Match;
setup->Waveform_Generation_Mode0 = FAST_PWM_0;
setup->Waveform_Generation_Mode1 = FAST_PWM_1;
setup->FC_Compare_A = Disconnected;
setup->FC_Compare_B = Disconnected;
setup->Clock_Select = Clock_Divisor_x8;
setup->Timer_Counter_Register = 0;
setup->Compare_Register_A = 220;
setup->Compare_Register_B = 110;


что то типа того! Не нашел в интернете не запрета не разрешения их использования. Вот и вопрос можно ли так делать или нет? (WinAvr схавает и код работать будет только какие то сомнения что не все так гладко)

Зы разница в том что кода больше становиться но он проктически не нуждается в комментировании а вот регистры требуют тонны комментариев описывающих, что происходит и устаревают тут же после правки кода! А битовые поля можно так сказать само-документирование! (осмысленные имена)
я повелитель электронов! Но иногда появляются электроны бунтари и делают, что им вздумается, например, прокладывают новые пути движения...

"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение ARV »

в чем сомнения-то?
если не брать в расчет некоторую тормознутость такого подхода (во всяком случае WinAVR генерирует не самый идеально оптимальный код) все будет нормально работать.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
DronVolk
Встал на лапы
Сообщения: 109
Зарегистрирован: Чт сен 03, 2015 15:52:10
Откуда: Сибирский федеральный округ

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение DronVolk »

На сайте атмела есть описание всех вкусностей к avr а это не описано ни где. А как правильно сбрасывать флаги типа OCF0B в регистре TIFR0. (хочу все в кучу собрать в одну структуру) просто мне кажется что они при любой правке структуры будут сброшены (вот что мне покоя не давало допер наконец))))
я повелитель электронов! Но иногда появляются электроны бунтари и делают, что им вздумается, например, прокладывают новые пути движения...

"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение ARV »

флаги запросов прерываний сбрасываются записью единицы. а когда вы работаете с битовыми полями, на место "неиспользуемых" битов пишется прежнее их состояние, т.е. флаг запроса будет сброшен, если он стоял.
тут, конечно, нюансик...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ks0
Прорезались зубы
Сообщения: 231
Зарегистрирован: Чт фев 28, 2013 14:16:10

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение ks0 »

DronVolk писал(а):

Код: Выделить всё

typedef struct{
       char Compare_Match_A_Mode:2;
       char Compare_Match_B_Mode:2;
...




А где в стандарте языка сказано в каком порядке идут биты и идут ли они непрерывно друг за другом?
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение slavokhire5 »

ks0 писал(а):
DronVolk писал(а):

Код: Выделить всё

typedef struct{
       char Compare_Match_A_Mode:2;
       char Compare_Match_B_Mode:2;
...




А где в стандарте языка сказано в каком порядке идут биты и идут ли они непрерывно друг за другом?


на сколько я знаю, битовые поля считаются не особо переносимыми штуками. внутри своего устройства - используйте пожалуйста. но если нужно их передавать между десятком разношерстных архитектур, то лучше битовые маски)
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Аватара пользователя
DronVolk
Встал на лапы
Сообщения: 109
Зарегистрирован: Чт сен 03, 2015 15:52:10
Откуда: Сибирский федеральный округ

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение DronVolk »

ks0 писал(а):А где в стандарте языка сказано в каком порядке идут биты и идут ли они непрерывно друг за другом?


Я не знаю где в стандарте описано! Это зависит от компилятора (нужно проверять и использовать пред-процессор)!
Со всеми нюансами я разберусь))) Вопрос был в камнях в лотке при использовании битовых полей))))
Они идут непрерывно в пределах байта а дальше уже по выравниванию структуры что пренудительно ставиться предпроцесором в 1 байт (#pragma pack(push,1) и следование тоже таким макаром)


slavokhire5 писал(а):на сколько я знаю, битовые поля считаются не особо переносимыми штуками. внутри своего устройства - используйте пожалуйста. но если нужно их передавать между десятком разношерстных архитектур, то лучше битовые маски)


Предполагается их использовать для регистров мк а они строго индивидуальны и переносить тет нечего! (эт если ко мне послание)
я повелитель электронов! Но иногда появляются электроны бунтари и делают, что им вздумается, например, прокладывают новые пути движения...

"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.
Аватара пользователя
ks0
Прорезались зубы
Сообщения: 231
Зарегистрирован: Чт фев 28, 2013 14:16:10

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение ks0 »

Так а если компилятор другой будет? То ку-ку? Никакой гарантии.
Аватара пользователя
DronVolk
Встал на лапы
Сообщения: 109
Зарегистрирован: Чт сен 03, 2015 15:52:10
Откуда: Сибирский федеральный округ

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение DronVolk »

Ага :))
Это как заголовочные файлы - оно обрастают кучей строк пред-процессора и половина это проверка какой компилятор используется))) (я задавая вопрос не предпологал что потребуется переносить этот код)
В стандарте где то есть описание, но оно такое же противоречивое как для обычных структур типа выравнивания (степень двойки или кратность размера переменных)

Я все таки откопал информацию
Работа с регистрами внешних устройств в языке C
часть 1 http://habrahabr.ru/post/220717/
часть 2 http://habrahabr.ru/post/221459/
часть 3 http://geektimes.ru/post/254734/

И в статье не затрагивается вопрос о сбросе флага (это остается на совести програмиста )
я повелитель электронов! Но иногда появляются электроны бунтари и делают, что им вздумается, например, прокладывают новые пути движения...

"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение Pnjom-Penb »

DronVolk писал(а):Можно ли использовать битовые поля при работе с регистрами?
Можно, если есть уверенность, что структура точно ляжет на регистры. Если очень надо выпендриться и накрыть одной структурой несколько регистров, то необходимо в заголовочном файле переключать выравнивание и перед выходом возвращать его в исходное значение.
Предпочтительнее оставаться в рамках одного регистра, так как сущностно в этом подходе главное - возможность именовать битовые поля, а остальное - рюшечки.

PS Если бы еще не эта чертова обратная совместимость, из-за которой некоторые битовые поля разорваны между регистрами, смотрелось бы миленько... :)))
Аватара пользователя
DronVolk
Встал на лапы
Сообщения: 109
Зарегистрирован: Чт сен 03, 2015 15:52:10
Откуда: Сибирский федеральный округ

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение DronVolk »

я бы еще добавил что теряется атоморность, скорость и итоговый размер растет в разы :))

Проблема в переносимости между компиляторами является причиной отсутствия апноута на сайте атмела.

именно разрыв некоторых полей в регистрах мешает оставаться в пределах одного регистра. Получается много сущностей с одинаковыми полями, а причина использования битовых полей в сокращении этих сущностей (несколько регистров с ужасными именами становятся одной структурой с осмысленными именами и параметрами)
я повелитель электронов! Но иногда появляются электроны бунтари и делают, что им вздумается, например, прокладывают новые пути движения...

"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение Pnjom-Penb »

DronVolk писал(а):теряется атоморность
Ничего не теряется.
DronVolk писал(а):теряется ... скорость и итоговый размер растет в разы
Это неправда.
DronVolk писал(а):разрыв некоторых полей в регистрах мешает ...
Разрывов не так и много, не стоит драматизировать.
DronVolk писал(а):Получается много сущностей ... а причина использования битовых полей в сокращении (числа) этих сущностей
Число сущностей сокращается, цель достигнута (настолько, насколько позволяет железо).
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение COKPOWEHEU »

Пример - настройка режима таймера, биты WGMx3:WGMx0, разнесенные по TCCRxA и TCCRxB. Атомарность теряется (разве что блокировать прерывания, что бред), скорость доступа - хз. Если записывается только тот регистр, который нужно изменить, все нормально, но я пока плохо представляю, как это может быть реализовано. Если же перезаписываются оба регистра - теряется скорость. Размер кода опять-таки неизвестно, зависит от реализации.
Аватара пользователя
DronVolk
Встал на лапы
Сообщения: 109
Зарегистрирован: Чт сен 03, 2015 15:52:10
Откуда: Сибирский федеральный округ

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение DronVolk »

Блин если бы да кабы. :))
в регистре TCCR0B параметр WGM02 находится в центре :( хотел применить финт ушами и выравнивание старший младший в центре структуры запихать. Не канает :cry:

В общем пример от руки для битовых полей выше лежит, а атоморность и так теряется из за разрыва WGM00:02.
COKPOWEHEU писал(а):разве что блокировать прерывания, что бред
не бред! Любые манипуляции с регистрами желательно защищать если нет уверенности в атоморности и тут нужно смотреть высер компилятора!

попробую накидать структуру для 0 таймера может быть будет вкусно и минусы не так страшны. (падение скорости, увеличение размера кода )

зы если брать 8-ми битный avr то выравнивание получается в 1 байт и код

Код: Выделить всё

#pragma pack(push, 1)
...
#pragma pack(pop)


не меняет поведения (хотя думаю что лучше подстраховаться)
я повелитель электронов! Но иногда появляются электроны бунтари и делают, что им вздумается, например, прокладывают новые пути движения...

"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.
Ответить

Вернуться в «AVR»