CodeVision AVR в вопросах и ответах
коль пошла такая пьянка, есть и у меня вопрос интересный.
Что будет если допустим я ловлю внешнее прерывание с частотой 10Гц, обработчик сбрасывает счетчик таймера который работает с частотой около 20кГц, ну и соответственно когда есть совпадение, работает обработчик прерывания таймера по совпадению. Что будет если выполняется обработка прерывания таймера и в это время возникает прерывание на INT0? Вот это мне очень интересно 
- Реклама
ничего интересного.
если не предпринято особых мер, AVR способно обрабатывать только 1 прерывание в каждый момент. т.е. если идет обработка одного прерывания, все остальные не начнут обрабатываться до завершения этого обработчика. а после завершения и исполнения 1 команды ассемблера в "месте прерывания" произойдет переход к обработке наиболее приоритетного прерывания из тех, запросы которых поступили за время обработки первого. как-то так.
если не предпринято особых мер, AVR способно обрабатывать только 1 прерывание в каждый момент. т.е. если идет обработка одного прерывания, все остальные не начнут обрабатываться до завершения этого обработчика. а после завершения и исполнения 1 команды ассемблера в "месте прерывания" произойдет переход к обработке наиболее приоритетного прерывания из тех, запросы которых поступили за время обработки первого. как-то так.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
т. е. запрещать прерывание во время обработки не обязательно? А code vision сам стек сохраняет?
МК сам это делает, аппаратно. Команда reti включит обратно.rxstart1 писал(а):т. е. запрещать прерывание во время обработки не обязательно?
- Реклама
Пробую работать с EEPROM с написанием программы на С.
Объявляю переменную в EEPROM
При компиляции образуется файл *.eep
Далее программа уже должна работать непосредственно с EEPROM и будет изменять в нем данные.
Если я потом комментирую код
то при последующей компиляции файл *.eep удаляется.
А как сделать, чтобы он остался, но в тоже время в программе не было явного объявления этой переменной?
Мысль такая, если я в будущем изменю код на более оптимальный или из-за ошибки, то чтобы у меня данные в EEPROM не затирались из самого кода.
При прошивке то защиту от перезаписи EEPROM можно выставить в фузах. А вот внутри программы как?
Объявляю переменную в EEPROM
Код: Выделить всё
unsigned eeprom char text_EEP[10]="Test";Далее программа уже должна работать непосредственно с EEPROM и будет изменять в нем данные.
Если я потом комментирую код
Код: Выделить всё
//unsigned eeprom char text_EEP[10]="Test";А как сделать, чтобы он остался, но в тоже время в программе не было явного объявления этой переменной?
Мысль такая, если я в будущем изменю код на более оптимальный или из-за ошибки, то чтобы у меня данные в EEPROM не затирались из самого кода.
При прошивке то защиту от перезаписи EEPROM можно выставить в фузах. А вот внутри программы как?
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Может переименовать или переместить?
Но зачем Вам это надо, я так и не понял. Как Вы потеряете данные, если они будут в исходнике, пускай и закомментированные?
Но зачем Вам это надо, я так и не понял. Как Вы потеряете данные, если они будут в исходнике, пускай и закомментированные?
из самого кода у вас ничего не затрется: файл eep надо прошивать в МК программатором. если вы не будете его прошивать и при этом не будете стирать EEPROM - её содержимое сохранится при любых прошивках кода МК.serg_svd писал(а):чтобы у меня данные в EEPROM не затирались из самого кода
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Хотел спросить делаю тахометр на сдвиговых регистрах соответственно использую аппаратный SPI. Есть творческий затык. как байт прирастить на 1 бит. чтобы было понятно:
0000 0000
0000 0001
0000 0011
0000 0111
ну и т. д.
Что то в голове вертится, и пока никак, извращение типа перебирать соответствующий массив не хочу.
0000 0000
0000 0001
0000 0011
0000 0111
ну и т. д.
Что то в голове вертится, и пока никак, извращение типа перебирать соответствующий массив не хочу.
Здвиг в лево на один и установка нулевого.
«И всё-таки она вертится!»
получим следущее
0000 0001
0000 0010
0000 0100
и т. д.
вот сделал
(x<<i)^1, где i-порядковый номер бита
0000 0001
0000 0010
0000 0100
и т. д.
вот сделал
(x<<i)^1, где i-порядковый номер бита
Вам же сказали - "и установка нулевого"
Код: Выделить всё
byte <<= 1;
byte |= 0x01;Да про отдельную прошивку данного файла программатором я в курсе. И я не про эту прошивку.ARV писал(а):из самого кода у вас ничего не затрется: файл eep надо прошивать в МК программатором.
Ведь если в исходнике прописан строковый массив в EEPROM,
Код: Выделить всё
unsigned eeprom char text_EEP[10]="Test";Код: Выделить всё
unsigned eeprom char text_EEP[10]="Test";"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Есть вопросы по коду.
1. Работает крайне тормознуто, хотя использую аппаратный SPI
2.Как сделать так, чтобы выводило 1 раз когда все сдвинет, а не каждые 8 бит. Вот к примеру в этой строчке
if (count>MaxLed) count=0; после обнуления count выводить, но в идеале сделать вывод привязав его к ШИМу скажем на TIMER0?
1. Работает крайне тормознуто, хотя использую аппаратный SPI
2.Как сделать так, чтобы выводило 1 раз когда все сдвинет, а не каждые 8 бит. Вот к примеру в этой строчке
if (count>MaxLed) count=0; после обнуления count выводить, но в идеале сделать вывод привязав его к ШИМу скажем на TIMER0?
Не будет. Это ведь не RAM, где переменные инициализируются на старте. В случае eeprom инициализация начальными значениями идёт на этапе прошивки, а при выполнении ожидается, что всё уже проинициализировано.serg_svd писал(а):Разве он не будет затирать каждый раз при запуске контроллера любой измененный текст в EEPROM, на данный прописанный в коде?Код: Выделить всё
unsigned eeprom char text_EEP[10]="Test";
- Сообщения: 41
- Зарегистрирован: Сб окт 29, 2011 21:46:14
Суть проблемы такова.
Есть ноут RoverBook Partner e415l с установленым на нем CodeVisionAVR 3.12.
Прога запускается все отлично компилится. Только есть проблема с самим прожиком МК.
Сигнатура читается нормально. А как запускаю какой то процес с епромкой или флешой, то сразу или через несколько процентов на прогресбаре валит отшибку и не хочет прошивать нормально.
Такая же трабла проявляется на версии 2.05a
Грешил на программатор и МК. Но на стационарном компе на работе все работает нормально.
Менял уже и скорость порта и его настройки, преставил винду, все драйвера.
Проблема не ушла. Дошел до того что уже игрался с приоритетом процесов в диспетчере задач.
Все остается так же.
Даже на программаторе Громова через СOM порт программой UniProf не читает МК.
Да, знаю что этот ноут тот еще калькулятор(другого мобильного ПК нет).
Кто может подсказать куда дальше копать или где может быть еще собака зарыта???
Есть ноут RoverBook Partner e415l с установленым на нем CodeVisionAVR 3.12.
Прога запускается все отлично компилится. Только есть проблема с самим прожиком МК.
Сигнатура читается нормально. А как запускаю какой то процес с епромкой или флешой, то сразу или через несколько процентов на прогресбаре валит отшибку и не хочет прошивать нормально.
Такая же трабла проявляется на версии 2.05a
Грешил на программатор и МК. Но на стационарном компе на работе все работает нормально.
Менял уже и скорость порта и его настройки, преставил винду, все драйвера.
Проблема не ушла. Дошел до того что уже игрался с приоритетом процесов в диспетчере задач.
Все остается так же.
Даже на программаторе Громова через СOM порт программой UniProf не читает МК.
Да, знаю что этот ноут тот еще калькулятор(другого мобильного ПК нет).
Кто может подсказать куда дальше копать или где может быть еще собака зарыта???
- Сообщения: 804
- Зарегистрирован: Чт мар 12, 2009 16:31:05
у меня заработало с заменой HDD на SSD.
Хотя надо смотреть - поддерживает ли калькулятор SATA.
Хотя надо смотреть - поддерживает ли калькулятор SATA.
- Сообщения: 41
- Зарегистрирован: Сб окт 29, 2011 21:46:14
Неа, не прокатит, к сожалению там только обычный ATA(IDE).
Элементарно проверь просадку +5В на USB
Второй вариант, возможно ты юзаешь USB 3.0 попробуй воткнуть в USB 2.0 и понизить программно скорость передачи
Второй вариант, возможно ты юзаешь USB 3.0 попробуй воткнуть в USB 2.0 и понизить программно скорость передачи
Вопрос ... для знакомства/изучения программирования микроконтроллеров Arduino, обязательно иметь подключенную схему или можно и не иметь его, как при изучении ПР_а от ОВЕН?
Смеюсь последний ... Тормоз однако!
"Мяса много не бывает ... кто был с этим не согласен ... остался на ветках."(моя мысля)
"Мяса много не бывает ... кто был с этим не согласен ... остался на ветках."(моя мысля)



