Нескольно простых вопросов о программировании AVR на Си.
- Сообщения: 220
- Зарегистрирован: Ср янв 15, 2014 14:41:21
Сори просто не в ту тему влез. Хотел спросить про шим сигнал. Всем спасибо за ответы тема закрыта.
- Реклама
из-за чего может происходить зависание в этом цикле ?
Код: Выделить всё
for( uint8_t i = 0; i <= 255; ++i ){
printf(" %u \n",i);
}
Tell Me The Truth
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
Переменная i всегда будет меньше либо равна 255, потому что она восьмибитная.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
есть некий кусок кода с помощью которого данные массива переписываются в файл
пишутся они в 10-ном формате
как сделать чтобы они писались в 16-ном формате ?
пишутся они в 10-ном формате
как сделать чтобы они писались в 16-ном формате ?
Код: Выделить всё
for( uint16_t i = 0; i <= 31; i++ ){ // вывод в файл
fprintf(p_file, "%u,",sin_table[i]);
}
Tell Me The Truth
- Сообщения: 290
- Зарегистрирован: Чт ноя 06, 2014 13:09:06
FreshMan, %x или %X (см. описание форматов функции printf)
На предидущий вопрос:
На предидущий вопрос:
Код: Выделить всё
uint8_t i = 0;
do {
printf ("%u ", i);
} while (++i != 0);
Последний раз редактировалось viiv Чт янв 12, 2017 16:56:58, всего редактировалось 1 раз.
- Реклама
- Сообщения: 522
- Зарегистрирован: Чт янв 21, 2016 15:59:10
вместо %u - %xFreshMan писал(а):есть некий кусок кода с помощью которого данные массива переписываются в файл
пишутся они в 10-ном формате
как сделать чтобы они писались в 16-ном формате ?Код: Выделить всё
for( uint16_t i = 0; i <= 31; i++ ){ // вывод в файл fprintf(p_file, "%u,",sin_table[i]); }
носом чуял что есть это решение, но праздный ум додуматься не могviiv писал(а):Код: Выделить всё
uint8_t i = 0; do { printf ("%u ", i); } while (++i != 0);
спасибо
Tell Me The Truth
- Сообщения: 378
- Зарегистрирован: Сб сен 19, 2009 07:02:19
Как вариант :FreshMan писал(а):...носом чуял что есть это решение, но праздный ум додуматься не мог...
Код: Выделить всё
for( uint8_t i = 1; i ; i++ ){
printf(" %u \n", i - 1 );
}
насколько я понял то для того чтобы разрешить прерывание в прерывании следует применять такую форму записи
а существует ли возможность разрешения конкретного перывания во всех прерываниях ?
Код: Выделить всё
ISR(XXX_vect, ISR_NOBLOCK)
{
...
}Tell Me The Truth
вы сами-то поняли, чего спросили?FreshMan писал(а):существует ли возможность разрешения конкретного перывания во всех прерываниях ?
при входе в обработчик прерывания аппаратно запрещаются ВСЕ прерывания, глобально. пока глобально прерывания запрещены - ничего "выборочно" разрешить нельзя.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
безусловноARV писал(а):вы сами-то поняли, чего спросили?
допустим имеется 7 прерываний
при срабатывании каждого из прерываний все остальные запрещаются
а мне, допустим, надо чтобы при срабатывании любого из прерываний запрещались все кроме 3-го
Tell Me The Truth
во-первых, запрещаются не остальные, а вообще все прерывания.
во-вторых, то, что вы хотите, можно сделать ручками, но это будет крайне странный, извращенческий подход к решению задачи, уж не знаю, что вы там затеяли.
в нужном вам обработчике прерываний первым делом запрещаете все "лишние" прерывания, т.е. те, которые вам тут не нужны. делается это весьма муторным способом, т.к. флаги разрешения разных прерываний размещены в куче разных регистров: таймерные в TIMSK, АЦП-шное в ADCSRA и так далее.
после этого глобально разрешаете прерывания - вуаля! оставшееся "нужное Вам" прерывание сможет обрабатываться!
только перед тем, как завершить обработчик вам придется в обратном порядке разрешить все то, то позапрещали ранее...
когда я читаю странный вопрос, я всегда считаю, что вопрошающий избрал неверный алгоритм решения своей задачи, - и почти никогда не ошибаюсь!
во-вторых, то, что вы хотите, можно сделать ручками, но это будет крайне странный, извращенческий подход к решению задачи, уж не знаю, что вы там затеяли.
в нужном вам обработчике прерываний первым делом запрещаете все "лишние" прерывания, т.е. те, которые вам тут не нужны. делается это весьма муторным способом, т.к. флаги разрешения разных прерываний размещены в куче разных регистров: таймерные в TIMSK, АЦП-шное в ADCSRA и так далее.
после этого глобально разрешаете прерывания - вуаля! оставшееся "нужное Вам" прерывание сможет обрабатываться!
только перед тем, как завершить обработчик вам придется в обратном порядке разрешить все то, то позапрещали ранее...
когда я читаю странный вопрос, я всегда считаю, что вопрошающий избрал неверный алгоритм решения своей задачи, - и почти никогда не ошибаюсь!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
все может быть и сие не есть исключениемARV писал(а):вопрошающий избрал неверный алгоритм решения своей задачи
подскажите пожалуйста алгоритм для для правильного составления алгоритмов .
Tell Me The Truth
раньше намек на него был в моей подписи - не умножай сущности без необходимости, - принцип бритвы Оккама.FreshMan писал(а):подскажите пожалуйста алгоритм для для правильного составления алгоритмов
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при всем моем уважении, возможно этот принцип и раскрывает вам весь секрет построения алгоритмов но я его постичь не могуARV писал(а): принцип бритвы Оккама.
Tell Me The Truth
я даже после литра водки не могу представить, для чего может быть необходимо разрешать обработку какого-то конкретного прерывания во время обработки другого прерывания, притом что остальные должны быть запрещены... возможно, надо не пить, а курить что-то...
поэтому я и предполагаю, что вы пошли не в ту сторону. но без конкретики больше добавить нечего...
поэтому я и предполагаю, что вы пошли не в ту сторону. но без конкретики больше добавить нечего...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
водкак то видеть не анисовая да и не ключница её делала поэтому и представить не можетеARV писал(а):я даже после литра водки не могу представить
а вот это уже попахивает западной пропагандой ( тлетворное влияния запада )ARV писал(а):возможно, надо не пить, а курить что-то...
Tell Me The Truth
- Сообщения: 522
- Зарегистрирован: Чт янв 21, 2016 15:59:10
если уж вы взялись работать через прерываия, то, поскольку систему прерываний одноуровневая, то надо определиться самому с приоритетом прерываний. И делать обработчики максимально короткими.FreshMan писал(а):при всем моем уважении, возможно этот принцип и раскрывает вам весь секрет построения алгоритмов но я его постичь не могуARV писал(а): принцип бритвы Оккама.
Подскажите, выше увидел что нельзя сравнивать знаковые и беззнаковые переменные. Как тогда выйти с положения. Я просто недавно начал программировать МК на СИ и некоторых вещей еще не знаю.
Ниже часть кода, в нем переменныя Error и Error_Integral может иметь отрицательные значения. И еще, код этот взят с аппноута AVR221 и переделан под себя. Вроде все работает, но может логика не такая, как было задумано?
Ниже часть кода, в нем переменныя Error и Error_Integral может иметь отрицательные значения. И еще, код этот взят с аппноута AVR221 и переделан под себя. Вроде все работает, но может логика не такая, как было задумано?
Спойлер

Свежий! Я тебя полюбил, я тебя научу(ц):
У авр есть куча устройств (цап, приемопередатчик, таймеры) много их и имя им легион. А еще есть устройство - ядро, если можно его так обозвать.
Так вот каждое устройство имеет в среднем два регистра управление и обрабатываемое значение.
Самое главное - это ядро. Его управляющий регистр - SREG. Каждый битик в нем - это типа переключатель. Значение "1" - можно, "0" - низя.
Предположим, у нас есть устройство приемопередатчик. У него есть регистр управления и регистр передаваемого и принимаемого значения. Передатчик - асинхронный. Аврка она восьмибитная, поэтому и регистр значения тоже.
А вот регистр управления выглядит например так: ([приемопередатчик вкл.][можно принимать][можно передавать][передача завершена][приняты новые данные][буфер пуст][фантазия][кончилась]) - ну не суть, управляющих регистров может быть over 9k... И для некоторых битов региста управления можно определить набор действий ISR(беги_за_пивом)....
Ядро при каждом такте(считаем что при каждом) проверяет бит "I" регистра SREG. И если оно 1 то ползает по почти всем управляющим регистрам и проверяет где есть 1, и если есть 1 то посылает малчика за пивом. Тоесть SREG - это глава семейства.
Предположим мы запустили приемопередатчик, разрешили прием и передачу. Соответственно сразу пиво будут хотеть (буфер передатчика пустой). Предположим что на линии приемника - злая бабка которая беспристанно настукивает свои предъявы " хорош шуметь, опять за пивом поперлись, наркоманы, ша милиционера позову ...."и в этом духе, и наблюдает в форточку через телескоп.
Всем рулит ядро-батя. Оно смотрит что пива нет(буфер передатчика пуст) и бабка трезвонит(сообщение принято) но у ядра малчик - один и что важнее пиво или бабка не понятно...поэтому у каждого прерывания есть приоритет. Тоесть либо шашечки либо ехать, и это у аврины забито железно, сапогами, по "морде и попе бляхой от армейского ремня".
Малчик бежит за пивом, мимо бабки, при этом батя не может послать еще малчика, в это время бит "I" принудительно ставится в 0. но малчик не дурак, он звонит бате и говорит - бабка приперлась и батя берет это дело на карандаш, выставляя бит (принято сообщение).
Если малчик щустрый то он принесет баночное почти сразу, а если пошел за разливным или попал на очередь...
Положим малчик был быстр, то он отдает бате пиво, тот его залпом уговаривает (прерывание "буфер пуст" - закончилось и еготфлаг будет выставлен в 0 - малчик за пивом то сгонял, ога)))))) , бит "I" автоматом вернулся на 1, и малчик идет разбираться с бабкой...т.к у бати все ходы записаны...
Если малчик ходил долго, то по приходу он бате скажет - бабка дверь того...поцарапала, и на карандаш возмется " буфер приемника переполнен". И малчик пойдет рулить с бабкоц не только за "хорош шуметь" но и за поцарапанную дверь, при этом инструкции в процедуре main - никто не отменял... Пылесосить и уроки учить малчику мама наказывала.
Теперь о говнокодинии... Послав малчика, в процедуре "за пивом" ему сказать если че то вернись – малчик и за пивом не сбегает толком, и с бабкой не разрулит. Малчику надо выдавать блокнот, чтоб тот все "предъявы запомнил" тоесть программеру нужно внутри прерывания определять что было куда плыть и кто все эти люди.
Спасибо за внимание. Вы прочитали радиомоноспектакль "авр и п - рерывания - на пальцах" для продолжения банкета пишите письма и высылайте деньги мелкими купюрами на безналичный расчет....))))))
ЗЫ и хохмы ради, и образования для. С ув. тов. c2n
У авр есть куча устройств (цап, приемопередатчик, таймеры) много их и имя им легион. А еще есть устройство - ядро, если можно его так обозвать.
Так вот каждое устройство имеет в среднем два регистра управление и обрабатываемое значение.
Самое главное - это ядро. Его управляющий регистр - SREG. Каждый битик в нем - это типа переключатель. Значение "1" - можно, "0" - низя.
Предположим, у нас есть устройство приемопередатчик. У него есть регистр управления и регистр передаваемого и принимаемого значения. Передатчик - асинхронный. Аврка она восьмибитная, поэтому и регистр значения тоже.
А вот регистр управления выглядит например так: ([приемопередатчик вкл.][можно принимать][можно передавать][передача завершена][приняты новые данные][буфер пуст][фантазия][кончилась]) - ну не суть, управляющих регистров может быть over 9k... И для некоторых битов региста управления можно определить набор действий ISR(беги_за_пивом)....
Ядро при каждом такте(считаем что при каждом) проверяет бит "I" регистра SREG. И если оно 1 то ползает по почти всем управляющим регистрам и проверяет где есть 1, и если есть 1 то посылает малчика за пивом. Тоесть SREG - это глава семейства.
Предположим мы запустили приемопередатчик, разрешили прием и передачу. Соответственно сразу пиво будут хотеть (буфер передатчика пустой). Предположим что на линии приемника - злая бабка которая беспристанно настукивает свои предъявы " хорош шуметь, опять за пивом поперлись, наркоманы, ша милиционера позову ...."и в этом духе, и наблюдает в форточку через телескоп.
Всем рулит ядро-батя. Оно смотрит что пива нет(буфер передатчика пуст) и бабка трезвонит(сообщение принято) но у ядра малчик - один и что важнее пиво или бабка не понятно...поэтому у каждого прерывания есть приоритет. Тоесть либо шашечки либо ехать, и это у аврины забито железно, сапогами, по "морде и попе бляхой от армейского ремня".
Малчик бежит за пивом, мимо бабки, при этом батя не может послать еще малчика, в это время бит "I" принудительно ставится в 0. но малчик не дурак, он звонит бате и говорит - бабка приперлась и батя берет это дело на карандаш, выставляя бит (принято сообщение).
Если малчик щустрый то он принесет баночное почти сразу, а если пошел за разливным или попал на очередь...
Положим малчик был быстр, то он отдает бате пиво, тот его залпом уговаривает (прерывание "буфер пуст" - закончилось и еготфлаг будет выставлен в 0 - малчик за пивом то сгонял, ога)))))) , бит "I" автоматом вернулся на 1, и малчик идет разбираться с бабкой...т.к у бати все ходы записаны...
Если малчик ходил долго, то по приходу он бате скажет - бабка дверь того...поцарапала, и на карандаш возмется " буфер приемника переполнен". И малчик пойдет рулить с бабкоц не только за "хорош шуметь" но и за поцарапанную дверь, при этом инструкции в процедуре main - никто не отменял... Пылесосить и уроки учить малчику мама наказывала.
Теперь о говнокодинии... Послав малчика, в процедуре "за пивом" ему сказать если че то вернись – малчик и за пивом не сбегает толком, и с бабкой не разрулит. Малчику надо выдавать блокнот, чтоб тот все "предъявы запомнил" тоесть программеру нужно внутри прерывания определять что было куда плыть и кто все эти люди.
Спасибо за внимание. Вы прочитали радиомоноспектакль "авр и п - рерывания - на пальцах" для продолжения банкета пишите письма и высылайте деньги мелкими купюрами на безналичный расчет....))))))
ЗЫ и хохмы ради, и образования для. С ув. тов. c2n


