Главная категория > Программаторы
AVR Studio4 и оптимизация
Two_byte:
Народ, поправьте, если не прав - аппаратные прерывания в АВР не бывают вложенными???
Т.е., если я в обработке INT1 запрещаю прерывание от компаратора, то оно не сработает?, при этом даже не надо флаг I (общий запрет прерываний ) сбрасывать?
Я в обработке сделал запрет прерывания от АС, и до кучи, как в ДШ прописано на atmega8 еще установил!!! флаг прерывания ACI - там написано, что надо "1" записать в него для его сброса. Я в прострации.
drfaust:
--- Цитата: Two_byte от 24/07/2014 15:30:09 ---
--- Цитата: tridentxp от 24/07/2014 15:27:55 ---volatile unsigned char i = 0; data_e; temp = 0; гыыы. во я слепошарый не заметил. вопрос: а чо студия ничо не сказала что тут каким то переменным неизвестного типа производится присвоение ?...
--- Конец цитаты ---
а окно бьюилда внизу, и маленькое. Я и не замечал - он показывал, что скомпилировал, типа все ОК, а варнинги я уже потом увидал.
--- Конец цитаты ---
На temp=0 должен был быть еггог, если авр-студия не начала поддерживать С++11;
Насчёт вложенныз запретов прерываний - нигде не видел. даже на х86 что бы какое-либо прерывание разрешить внутри другого прерывания, приходилось PIC(контроллёр прерываний) напрямую программировать. cli - лочит всё подряд.
З.Ы. Ну а насчёт точек, запятых и точек с запятой - тут СИ очень привередлив. Я тоже несколько раз смотрел код и нифига не увидел :(
Юр:
Вложенное прерывание сработает в зависимости от приоритета, а cli разрешит и вне зависимости от приоритета. Это общая идеология во всех линейках микроконтроллеров и 86-е системы конечно то же самое.
А точки с запятой - это типичная беда когда внезапно меняешь всякие васики на си и обратно. :)
Two_byte:
Я тоже сначала не заметил, но, temp, это так, до кучи - нигде она не используется. WinAVR инициализирует переменные в самом начале. В ИДА полез просто поглянуть на код, а, там такое!!!
На Х86 реально можно вызвать прерывание из обработчика другого, но, только программным путем.
А, насчет точек и иже с ними - только седня прокрутил окно бьюилдера, и там такое!!!. Ну тут и начал думать. Код естессно не полный - выложен алгоритм для сектора в 42.35 градуса. INT0 - это прерывание по началу сектора, INT1 - по концу сектора, ANACOMP - прерывание по искре. Отношение сектора к углу окружности = 8.5 ровно.
Т.е. надо построить график зависимости УЗО от оборотов двигателя. Математику естессно разгрузил, подсчитав константы. Осталось только добавить запись в Епром, и звуковую сигналку. А так, всем спасибо!!!. Volatile прочитал вчера - ничего не нарушил, все по канонам написанного. ( по моим скудным понятиям ).
Two_byte:
То ЮР -> насколько я знаю, в отличие от 51-го микрокомплекта, у АВР нет приоритета прерываний.
Навигация
Перейти к полной версии