Обсуждаем контроллеры компании Atmel.
Ответить

Вт апр 10, 2007 18:42:04

Я в CVAVR вот такой код написал:

Код:
interrupt [TIM0_OVF] void timer0_int(void)
{
PORTC++;
#asm("ret")
}


Но тогда в листинге видно что не выполняются
некоторые действия до RETI

Код:
;      72 interrupt [TIM0_OVF] void timer0_int(void)
;      73 {

   .CSEG
_timer0_int:
   ST   -Y,R30
   IN   R30,SREG
   ST   -Y,R30
;      74 PORTC++;
   IN   R30,0x15
   SUBI R30,-LOW(1)
   OUT  0x15,R30
;      75 #asm("ret")
   ret
;      76 }

   LD   R30,Y+
   OUT  SREG,R30
   LD   R30,Y+
   RETI


вот это пропускается

Код:
   LD   R30,Y+
   OUT  SREG,R30
   LD   R30,Y+

Вт апр 10, 2007 18:49:09

Нада будет еще с jmp попробовать накрутить, вернусь потом крутану

Вт апр 10, 2007 18:57:35

Наверно проще просто запретить те прерывания вызова которых вы опасаетесь по завершении обработчика.

Ср апр 11, 2007 01:18:57

Так можно одельно глобальную переменную обьявить, потом сделать функцию которая будет ее записывать (поскольку почемуто в WinAVR на прямую это делать нехочет), а потом ее использовать в главной функции, но это как-то не то, все таки похимичить нада, чтобы было более оптимально. Хотя уже пробовал jmp, то тоже в WinAVR прыгало не туда куда надо, но еще все таки попробую, может что-то упустил....

Ср апр 11, 2007 17:13:28

Ни пробовал в компиляторе, или может както через параметр функции обработки перерывания, настроить чтобы, при выходе использовалась ret, а не reti??? Я себе написал выход из функции по адресу... Вышел, но переменные при этом не сохраняються, да и стек остается, гонивно выходит...., можно было б в конце, когда весь код написан, скопировать дисасемблерный код, который выполняет возобновление переменных и возврат в функцию, только заменив при этом ret на reti. Но это тоже гон..., проще и в правду запретить те прерывания которых опасаешся, а потом возобновить... :?

Чт окт 11, 2007 16:12:15

можно попробовать вместо INTERRUPT - SIGNAL
Код:
SIGNAL(имя прерывания)
{
}

похоже в новом WinAvr INTERRUPT убрали

Чт окт 18, 2007 17:25:17

набрел тут кстати - если охарактеризовать вкратце:
WinAvr для тех, кто уже знает C
http://avr.h15.ru/index.php?page=winavr

WinAvr в вопросах и ответах

Ср ноя 07, 2007 20:05:23

такая фигня тут со мною произошла.
повторяю один девайс, и в прошивке необходимо поменять некоторые данные.
сел сегодня, допаял... думаю, надо бы уже прошивку залить...
но make all выдает кучу ошибок...
сколько не пробовал устранить ошибки, ничего не получилось...
мож у меня компиляттор слишком старый(ну или слишком новый)?
выложил тут архив с исходниками... кому не сложно, попробуйте скомпилировать у себя - получится или нет...
я бы и не пытался чего сделать, да он (автор) hex выложил, значит исходники правильные.... хотя кто их, фрицев, знает...
буду очень благодарен за помощь/совет...
Вложения
mp3_src-0.1.zip
проверил - вирусов нет :-)
(28.12 KiB) Скачиваний: 545
Последний раз редактировалось jax Ср ноя 07, 2007 20:28:07, всего редактировалось 1 раз.

Re: проблема с WinAvr-20070525

Ср ноя 07, 2007 20:49:53

jax писал(а):автор hex выложил


А он не указал версию WinAVR в которой работал ? Или год публикации посмотрите. Может по дате создания файлов.

Можно будет соотв версию WinAVR найти.

Ср ноя 07, 2007 20:56:13

посмотрел даты создания файлов срхиве...
прикольная штука выявилась:
hex создан 05.03.2005, а исходники датируются 06.03.2005 :))
пишет такую фигню:
config.c:3: fatal error: opening dependency file .dep/*.o.d: Invalid argument

и не понятно мне, почему он начинает с config.c, а не с mp3.c...

Чт ноя 08, 2007 08:38:49

Вот это (см вложение) поставьте - мне помогло.
Вложения
winavr_patch.rar
(48.64 KiB) Скачиваний: 623

Чт ноя 08, 2007 16:29:48

спасибо за ссылочки...
патч не помог...
винавр почти докачал...
и тут до меня дошло в чем дело...
мож, вопрос не в тему... но все же...
конечно, компиляция начинается с mp3.c, и тут у него ступор: функций описаний нет в файлах *.h, они все в *.c, а они нигде не include...
я что-то не то делаю, да? подскажите, как эти файлы с функциями включить в проект... а то совсем грустно, что голова пуста... :)) :)
пойду еще поковыряю...

Чт ноя 08, 2007 17:26:28

поставил винАвр 2004 года... патч сверху, а то матерился на версию gnugcc...
и все равно не хочет... вроде берется, но пишет:
C:\WinAVR\utils\bin\make.exe: *** No rule to make target `*.o', needed by `mp3.elf'. Stop.

вот такая фигня... делаю свой makefile, та же ошибка с определением функций...

через 30 минут
мож это и не Вин Авр вовсе, я АврСтудио?
ни разу не работал с ней, поэтому только щас об этом подумал...
Студио использует Makefile? я из-за этого файла подумал на ВинАвр

Чт ноя 08, 2007 19:05:55

jax писал(а):поставил винАвр 2004 года... патч сверху


Зачем ему патч ???

Чт ноя 08, 2007 19:15:58

зачем ему патч??

да от безнадеги :))
не, правда, функции описаны в файлах *.c, а в главной программе только хидеры включены, а они, в свою очередь, тоже только на хидеры ссылаются...
я вот не в курсе... так и должно быть?
ребят, попробуйте у себя... мож я что-то не так делаю? в проекте все файлы указаны...

Чт ноя 08, 2007 20:09:06

WinAVR 20070122

В Makefile строку
Код:
SRC = *.c

заменил на
Код:
SRC = mp3.c config.c delay.c fat.c mmc.c spi.c test.c vs1001.c

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

Да, еще: мне кажется, что в mp3.c есть косяк (да и компилятор ругается) в основном цикле в строке
Код:
if(fopenc(ps.file_index,'r', "*       MP3", &fp))

возможно, имелось в виду
Код:
if(fopenc(ps.file_index,'r', "*.MP3", &fp))

хотя так тоже ругается, а вот так:
Код:
u08 temp [6] = "*.MP3";
if(fopenc(ps.file_index,'r', temp, &fp))

компилится без вопросов... Честно говоря, особо глубоко не копал.. :oops:
Вложения
mp3.rar
(141.9 KiB) Скачиваний: 590

Пт ноя 09, 2007 20:53:03

Aheir, спасибо... попробовал на WinAVR 20040404, ругается на invalid lvalue in assignment, попозже попробую на 20070525, мож получится чего...
это плеер не с этого сайта.
http://members.liwest.at/dobretsb/stephan/mp3player.html тут немецкие товарищи по пояльнику свою конструкцию выложили.
да, если честно, все началось с того, что у меня нет кварца на 25 МГц, поэтому решил заменить его на кварц 30 МГц, а для этого код надо поменять, иначе проигрывать быстрее будет...
теперь уже понял, что зря в это полез, завтра поеду в соседний город за мегой (спалил седня последнюю в ходе экспериментов на стабильность работы) и кварцы прикуплю...
если интересно, то обязательно выложу результаты экспериментов...
кстати, если есть проблемы с покупкой vs'ок, то их можно попросить у производителя. вот мне, если бы я заказал их в инет-магазине, они шли бы недели 3-4, а так авиапочтой за неделю пришли. бесплатно... но это по секрету 8) никому не говорите 8)

пока писал, подумал: а можно ли сжечь кварц при пайке? а то я все на мегу думаю, а ведь, как я слышал, авр не так просто убить...
кстати, как можно проверить работоспособность авр? я пытался считать чип в CVAVR, мож еще чего можно сделать?

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

Пт ноя 09, 2007 21:20:14

Плеер этот с нашего сайта, ну, т.е. на нашем сайте он появился, видимо, с указанной тобой странички, жаль, что с неточной схемой. :)
Результаты интересны весьма, так что по мере сил буду участвовать в разбирательствах с этой конструкцией.
Бывает, что при пайте от перегрева отваливаются проводники внутри кварца. На совсем малогабаритных кварцах (типа часовых - цилиндрики), например, рекомендуется при пайке придерживать вывод между местом пайки и корпусом пинцетом для обеспечения теплоотвода. А еще у меня как-то кварц умер от падения на пол.
Если мега уже зашита на работу от кварца - подключить любой другой заведомо рабочий да проверить. Иные способы проверки работоспособности МК, кроме как по отклику прошивальщику или по тестовой программе, мне неизвестны. Особенно если не сильно понятно, прошито ли в него что-нибудь, и если да - то что.
Но это все оффтоп в рамках данной ветки.
Кстати, есть предложение таки перебраться в ветку обсуждения этой статьи, будет полезнее и удобнее.

Пт ноя 09, 2007 21:38:15

Aheir писал(а):Кстати, есть предложение таки перебраться в ветку обсуждения этой статьи, будет полезнее и удобнее.

ОК, завтра чего сделаю, в ту тему писать буду... вопросов, наверное, будет...

Сб дек 15, 2007 00:42:29

Что то я не фига не въехал в этот кампулятыр. например строка PORTD=0 - в асме получаетсо хрен знает что, загружает 0 через указатели в какую то область памяти, в итоге ошибка. Как вставлять асм-функции так и не разобрался #ASM{} и подобное - не проходит. В чем прикол? Как его насроить?
Хотел ускорить разработку проэкта, а получилось наоборот, потерял 1 день. Вернулся на АСМ.
Ответить