Нескольно простых вопросов о программировании AVR на Си.
Re: Нескольно простых вопросов о программировании AVR на Си.
Сори просто не в ту тему влез. Хотел спросить про шим сигнал. Всем спасибо за ответы тема закрыта.
- Реклама
Re: Нескольно простых вопросов о программировании AVR на Си.
из-за чего может происходить зависание в этом цикле ?
Код: Выделить всё
for( uint8_t i = 0; i <= 255; ++i ){
printf(" %u \n",i);
}
Tell Me The Truth
Re: Нескольно простых вопросов о программировании AVR на Си.
Переменная i всегда будет меньше либо равна 255, потому что она восьмибитная.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Re: Нескольно простых вопросов о программировании AVR на Си.
есть некий кусок кода с помощью которого данные массива переписываются в файл
пишутся они в 10-ном формате
как сделать чтобы они писались в 16-ном формате ?
пишутся они в 10-ном формате
как сделать чтобы они писались в 16-ном формате ?
Код: Выделить всё
for( uint16_t i = 0; i <= 31; i++ ){ // вывод в файл
fprintf(p_file, "%u,",sin_table[i]);
}
Tell Me The Truth
Re: Нескольно простых вопросов о программировании AVR на Си.
FreshMan, %x или %X (см. описание форматов функции printf)
На предидущий вопрос:
На предидущий вопрос:
Код: Выделить всё
uint8_t i = 0;
do {
printf ("%u ", i);
} while (++i != 0);
Последний раз редактировалось viiv Чт янв 12, 2017 16:56:58, всего редактировалось 1 раз.
- Реклама
Re: Нескольно простых вопросов о программировании AVR на Си.
вместо %u - %xFreshMan писал(а):есть некий кусок кода с помощью которого данные массива переписываются в файл
пишутся они в 10-ном формате
как сделать чтобы они писались в 16-ном формате ?Код: Выделить всё
for( uint16_t i = 0; i <= 31; i++ ){ // вывод в файл fprintf(p_file, "%u,",sin_table[i]); }
Re: Нескольно простых вопросов о программировании AVR на Си.
носом чуял что есть это решение, но праздный ум додуматься не могviiv писал(а):Код: Выделить всё
uint8_t i = 0; do { printf ("%u ", i); } while (++i != 0);
спасибо
Tell Me The Truth
Re: Нескольно простых вопросов о программировании AVR на Си.
Как вариант :FreshMan писал(а):...носом чуял что есть это решение, но праздный ум додуматься не мог...
Код: Выделить всё
for( uint8_t i = 1; i ; i++ ){
printf(" %u \n", i - 1 );
}
Re: Нескольно простых вопросов о программировании AVR на Си.
насколько я понял то для того чтобы разрешить прерывание в прерывании следует применять такую форму записи
а существует ли возможность разрешения конкретного перывания во всех прерываниях ?
Код: Выделить всё
ISR(XXX_vect, ISR_NOBLOCK)
{
...
}Tell Me The Truth
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
вы сами-то поняли, чего спросили?FreshMan писал(а):существует ли возможность разрешения конкретного перывания во всех прерываниях ?
при входе в обработчик прерывания аппаратно запрещаются ВСЕ прерывания, глобально. пока глобально прерывания запрещены - ничего "выборочно" разрешить нельзя.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Нескольно простых вопросов о программировании AVR на Си.
безусловноARV писал(а):вы сами-то поняли, чего спросили?
допустим имеется 7 прерываний
при срабатывании каждого из прерываний все остальные запрещаются
а мне, допустим, надо чтобы при срабатывании любого из прерываний запрещались все кроме 3-го
Tell Me The Truth
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
во-первых, запрещаются не остальные, а вообще все прерывания.
во-вторых, то, что вы хотите, можно сделать ручками, но это будет крайне странный, извращенческий подход к решению задачи, уж не знаю, что вы там затеяли.
в нужном вам обработчике прерываний первым делом запрещаете все "лишние" прерывания, т.е. те, которые вам тут не нужны. делается это весьма муторным способом, т.к. флаги разрешения разных прерываний размещены в куче разных регистров: таймерные в TIMSK, АЦП-шное в ADCSRA и так далее.
после этого глобально разрешаете прерывания - вуаля! оставшееся "нужное Вам" прерывание сможет обрабатываться!
только перед тем, как завершить обработчик вам придется в обратном порядке разрешить все то, то позапрещали ранее...
когда я читаю странный вопрос, я всегда считаю, что вопрошающий избрал неверный алгоритм решения своей задачи, - и почти никогда не ошибаюсь!
во-вторых, то, что вы хотите, можно сделать ручками, но это будет крайне странный, извращенческий подход к решению задачи, уж не знаю, что вы там затеяли.
в нужном вам обработчике прерываний первым делом запрещаете все "лишние" прерывания, т.е. те, которые вам тут не нужны. делается это весьма муторным способом, т.к. флаги разрешения разных прерываний размещены в куче разных регистров: таймерные в TIMSK, АЦП-шное в ADCSRA и так далее.
после этого глобально разрешаете прерывания - вуаля! оставшееся "нужное Вам" прерывание сможет обрабатываться!
только перед тем, как завершить обработчик вам придется в обратном порядке разрешить все то, то позапрещали ранее...
когда я читаю странный вопрос, я всегда считаю, что вопрошающий избрал неверный алгоритм решения своей задачи, - и почти никогда не ошибаюсь!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Нескольно простых вопросов о программировании AVR на Си.
все может быть и сие не есть исключениемARV писал(а):вопрошающий избрал неверный алгоритм решения своей задачи
подскажите пожалуйста алгоритм для для правильного составления алгоритмов .
Tell Me The Truth
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
раньше намек на него был в моей подписи - не умножай сущности без необходимости, - принцип бритвы Оккама.FreshMan писал(а):подскажите пожалуйста алгоритм для для правильного составления алгоритмов
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Нескольно простых вопросов о программировании AVR на Си.
при всем моем уважении, возможно этот принцип и раскрывает вам весь секрет построения алгоритмов но я его постичь не могуARV писал(а): принцип бритвы Оккама.
Tell Me The Truth
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
я даже после литра водки не могу представить, для чего может быть необходимо разрешать обработку какого-то конкретного прерывания во время обработки другого прерывания, притом что остальные должны быть запрещены... возможно, надо не пить, а курить что-то...
поэтому я и предполагаю, что вы пошли не в ту сторону. но без конкретики больше добавить нечего...
поэтому я и предполагаю, что вы пошли не в ту сторону. но без конкретики больше добавить нечего...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Нескольно простых вопросов о программировании AVR на Си.
водкак то видеть не анисовая да и не ключница её делала поэтому и представить не можетеARV писал(а):я даже после литра водки не могу представить
а вот это уже попахивает западной пропагандой ( тлетворное влияния запада )ARV писал(а):возможно, надо не пить, а курить что-то...
Tell Me The Truth
Re: Нескольно простых вопросов о программировании AVR на Си.
если уж вы взялись работать через прерываия, то, поскольку систему прерываний одноуровневая, то надо определиться самому с приоритетом прерываний. И делать обработчики максимально короткими.FreshMan писал(а):при всем моем уважении, возможно этот принцип и раскрывает вам весь секрет построения алгоритмов но я его постичь не могуARV писал(а): принцип бритвы Оккама.
- hosturik
- Потрогал лапой паяльник
- Сообщения: 354
- Зарегистрирован: Чт июл 24, 2014 23:09:23
- Откуда: Киев
Re: Нескольно простых вопросов о программировании AVR на Си.
Подскажите, выше увидел что нельзя сравнивать знаковые и беззнаковые переменные. Как тогда выйти с положения. Я просто недавно начал программировать МК на СИ и некоторых вещей еще не знаю.
Ниже часть кода, в нем переменныя Error и Error_Integral может иметь отрицательные значения. И еще, код этот взят с аппноута AVR221 и переделан под себя. Вроде все работает, но может логика не такая, как было задумано?
Ниже часть кода, в нем переменныя Error и Error_Integral может иметь отрицательные значения. И еще, код этот взят с аппноута AVR221 и переделан под себя. Вроде все работает, но может логика не такая, как было задумано?
Спойлер

- c2n
- Сверлит текстолит когтями
- Сообщения: 1193
- Зарегистрирован: Ср июл 25, 2012 21:40:09
- Откуда: Самара
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Свежий! Я тебя полюбил, я тебя научу(ц):
У авр есть куча устройств (цап, приемопередатчик, таймеры) много их и имя им легион. А еще есть устройство - ядро, если можно его так обозвать.
Так вот каждое устройство имеет в среднем два регистра управление и обрабатываемое значение.
Самое главное - это ядро. Его управляющий регистр - 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


