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

Обсуждаем контроллеры компании Atmel.
низнайка
Прорезались зубы
Сообщения: 220
Зарегистрирован: Ср янв 15, 2014 14:41:21

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

Сообщение низнайка »

Сори просто не в ту тему влез. Хотел спросить про шим сигнал. Всем спасибо за ответы тема закрыта.
Реклама
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

из-за чего может происходить зависание в этом цикле ?

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

	for( uint8_t i = 0; i <= 255; ++i ){

	   printf(" %u \n",i);
	   
	}
Tell Me The Truth
Реклама
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

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

Сообщение YS »

Переменная i всегда будет меньше либо равна 255, потому что она восьмибитная.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

есть некий кусок кода с помощью которого данные массива переписываются в файл
пишутся они в 10-ном формате
как сделать чтобы они писались в 16-ном формате ?

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

	for( uint16_t i = 0; i <= 31; i++ ){   // вывод в файл

	   fprintf(p_file, "%u,",sin_table[i]);
	}
Tell Me The Truth
Реклама
Эиком - электронные компоненты и радиодетали
viiv
Грызет канифоль
Сообщения: 289
Зарегистрирован: Чт ноя 06, 2014 13:09:06

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

Сообщение viiv »

FreshMan, %x или %X (см. описание форматов функции printf)

На предидущий вопрос:

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

uint8_t i = 0;
do {
	printf ("%u ", i);
} while (++i != 0);
Последний раз редактировалось viiv Чт янв 12, 2017 16:56:58, всего редактировалось 1 раз.
Реклама
ozonn
Вымогатель припоя
Сообщения: 522
Зарегистрирован: Чт янв 21, 2016 15:59:10

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

Сообщение ozonn »

FreshMan писал(а):есть некий кусок кода с помощью которого данные массива переписываются в файл
пишутся они в 10-ном формате
как сделать чтобы они писались в 16-ном формате ?

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

	for( uint16_t i = 0; i <= 31; i++ ){   // вывод в файл

	   fprintf(p_file, "%u,",sin_table[i]);
	}
вместо %u - %x
Реклама
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

viiv писал(а):

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

uint8_t i = 0;
do {
	printf ("%u ", i);
} while (++i != 0);
носом чуял что есть это решение, но праздный ум додуматься не мог
спасибо :beer:
Tell Me The Truth
Аватара пользователя
shindax
Потрогал лапой паяльник
Сообщения: 378
Зарегистрирован: Сб сен 19, 2009 07:02:19

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

Сообщение shindax »

FreshMan писал(а):...носом чуял что есть это решение, но праздный ум додуматься не мог...
Как вариант :

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

  for( uint8_t i = 1; i ; i++ ){

      printf(" %u \n", i - 1 );
      
   }
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

насколько я понял то для того чтобы разрешить прерывание в прерывании следует применять такую форму записи

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

ISR(XXX_vect, ISR_NOBLOCK)
{
...
}
а существует ли возможность разрешения конкретного перывания во всех прерываниях ?
Tell Me The Truth
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

FreshMan писал(а):существует ли возможность разрешения конкретного перывания во всех прерываниях ?
вы сами-то поняли, чего спросили?

при входе в обработчик прерывания аппаратно запрещаются ВСЕ прерывания, глобально. пока глобально прерывания запрещены - ничего "выборочно" разрешить нельзя.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

ARV писал(а):вы сами-то поняли, чего спросили?
безусловно
допустим имеется 7 прерываний
при срабатывании каждого из прерываний все остальные запрещаются
а мне, допустим, надо чтобы при срабатывании любого из прерываний запрещались все кроме 3-го
Tell Me The Truth
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

в нужном вам обработчике прерываний первым делом запрещаете все "лишние" прерывания, т.е. те, которые вам тут не нужны. делается это весьма муторным способом, т.к. флаги разрешения разных прерываний размещены в куче разных регистров: таймерные в TIMSK, АЦП-шное в ADCSRA и так далее.
после этого глобально разрешаете прерывания - вуаля! оставшееся "нужное Вам" прерывание сможет обрабатываться!
только перед тем, как завершить обработчик вам придется в обратном порядке разрешить все то, то позапрещали ранее...

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

Мой уютный бложик... заходите!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

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

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

ARV писал(а): принцип бритвы Оккама.
при всем моем уважении, возможно этот принцип и раскрывает вам весь секрет построения алгоритмов но я его постичь не могу :))
Tell Me The Truth
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

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

Мой уютный бложик... заходите!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

ARV писал(а):я даже после литра водки не могу представить
водкак то видеть не анисовая да и не ключница её делала поэтому и представить не можете :)))
ARV писал(а):возможно, надо не пить, а курить что-то...
а вот это уже попахивает западной пропагандой ( тлетворное влияния запада ) :)) :wink: :))
Tell Me The Truth
ozonn
Вымогатель припоя
Сообщения: 522
Зарегистрирован: Чт янв 21, 2016 15:59:10

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

Сообщение ozonn »

FreshMan писал(а):
ARV писал(а): принцип бритвы Оккама.
при всем моем уважении, возможно этот принцип и раскрывает вам весь секрет построения алгоритмов но я его постичь не могу :))
если уж вы взялись работать через прерываия, то, поскольку систему прерываний одноуровневая, то надо определиться самому с приоритетом прерываний. И делать обработчики максимально короткими.
Аватара пользователя
hosturik
Потрогал лапой паяльник
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

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

Сообщение hosturik »

Подскажите, выше увидел что нельзя сравнивать знаковые и беззнаковые переменные. Как тогда выйти с положения. Я просто недавно начал программировать МК на СИ и некоторых вещей еще не знаю.
Ниже часть кода, в нем переменныя Error и Error_Integral может иметь отрицательные значения. И еще, код этот взят с аппноута AVR221 и переделан под себя. Вроде все работает, но может логика не такая, как было задумано?
СпойлерИзображение
Аватара пользователя
c2n
Сверлит текстолит когтями
Сообщения: 1193
Зарегистрирован: Ср июл 25, 2012 21:40:09
Откуда: Самара
Контактная информация:

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

Сообщение c2n »

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

Ядро при каждом такте(считаем что при каждом) проверяет бит "I" регистра SREG. И если оно 1 то ползает по почти всем управляющим регистрам и проверяет где есть 1, и если есть 1 то посылает малчика за пивом. Тоесть SREG - это глава семейства.
Предположим мы запустили приемопередатчик, разрешили прием и передачу. Соответственно сразу пиво будут хотеть (буфер передатчика пустой). Предположим что на линии приемника - злая бабка которая беспристанно настукивает свои предъявы " хорош шуметь, опять за пивом поперлись, наркоманы, ша милиционера позову ...."и в этом духе, и наблюдает в форточку через телескоп.
Всем рулит ядро-батя. Оно смотрит что пива нет(буфер передатчика пуст) и бабка трезвонит(сообщение принято) но у ядра малчик - один и что важнее пиво или бабка не понятно...поэтому у каждого прерывания есть приоритет. Тоесть либо шашечки либо ехать, и это у аврины забито железно, сапогами, по "морде и попе бляхой от армейского ремня".
Малчик бежит за пивом, мимо бабки, при этом батя не может послать еще малчика, в это время бит "I" принудительно ставится в 0. но малчик не дурак, он звонит бате и говорит - бабка приперлась и батя берет это дело на карандаш, выставляя бит (принято сообщение).
Если малчик щустрый то он принесет баночное почти сразу, а если пошел за разливным или попал на очередь...
Положим малчик был быстр, то он отдает бате пиво, тот его залпом уговаривает (прерывание "буфер пуст" - закончилось и еготфлаг будет выставлен в 0 - малчик за пивом то сгонял, ога)))))) , бит "I" автоматом вернулся на 1, и малчик идет разбираться с бабкой...т.к у бати все ходы записаны...
Если малчик ходил долго, то по приходу он бате скажет - бабка дверь того...поцарапала, и на карандаш возмется " буфер приемника переполнен". И малчик пойдет рулить с бабкоц не только за "хорош шуметь" но и за поцарапанную дверь, при этом инструкции в процедуре main - никто не отменял... Пылесосить и уроки учить малчику мама наказывала.

Теперь о говнокодинии... Послав малчика, в процедуре "за пивом" ему сказать если че то вернись – малчик и за пивом не сбегает толком, и с бабкой не разрулит. Малчику надо выдавать блокнот, чтоб тот все "предъявы запомнил" тоесть программеру нужно внутри прерывания определять что было куда плыть и кто все эти люди.

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

ЗЫ и хохмы ради, и образования для. С ув. тов. c2n
Ответить

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