PDA

Просмотр полной версии : AVR Studio для Linux



alldn
28.08.2009, 10:37
Подскажите пожалуйста, где можно скачать среду разработки, аналогичную AVR Studio, для Линукса. Конкретно для Ubuntu.
В интернете читал, что обычный AVR Studio можно запустить в Wine, но у меня этого не получилось, программа при старте ругается на XML парсер и подсунуть ей другой не удалось.

ra3gjw
28.08.2009, 13:07
Александр, а смысл чтобы использовать WinAVR?
Я использую eclipse
http://www.cs.hut.fi/Studies/T-106.530/2006/eclipse-avr.pdf
http://www.avrfreaks.net/index.php?name=PNphp BB2&file=viewtopic&t=65879

и под виндой тоже использую eclipse.

alldn
28.08.2009, 13:16
Я не используй WinAVR, я пишу на ассемблере, потому меня интересовала именно AVRStudio или подобная оболочка с транслятором и отладчиком.
Спасибо за ссылку, посмотрю. Раньше, при работе с 51 микросхемами я использовал оболочку KEIL C для разработки программ на ассемблере. Может и здесь такой фокус пройдет.

ra3gjw
28.08.2009, 18:53
sudo apt-cache search avr
выполните, и будет Вам счастье :) Было там и для асма что то. Сейчас нет возможности посмотреть ... Ubuntu 9.04 на работе осталась ...

alldn
28.08.2009, 19:59
Спасибо, в понедельник на работе посмотрю. Это там у меня суровое требование лицензионности. Дома пока обхожусь:-)

ra3gjw
28.08.2009, 20:55
Спасибо, в понедельник на работе посмотрю. Это там у меня суровое требование лицензионности. Дома пока обхожусь:-)
Аналогично. Если что, пишите на почту. (кстати синтезатор S2B2007 распаял .. щас пойду программировать :) )

alldn
28.08.2009, 22:14
Если будут вопросы, без проблем отвечу. Синтезатор повторяется на раз. В этом конечно большая (или бОльшая?) заслуга Александра Шатуна, то, что он делает повторяется на раз и без доработок и доп. настроек. Мы с ним прежде чем опубликовать очередную конструкцию долго бьемся смертным боем, отлаживая ее. Чтобы не было никаких замечаний даже от нас, знающих конструкцию изнутри и насквозь.

Вобщем всегда рад помочь.

alldn
28.08.2009, 22:21
Да, забыл сказать, если есть вопросы по программированию наших с Александром конструкций, можно открыть соответствующие ветки в форуме. В них я могу ответить на все возникающие вопросы, хотя большинство из вопросов уже решены на форуме сайта www.r3r.ru.

Mike53
30.08.2009, 20:32
Подскажите пожалуйста, где можно скачать среду разработки, аналогичную AVR Studio, для Линукса. Конкретно для Ubuntu.
В интернете читал, что обычный AVR Studio можно запустить в Wine, но у меня этого не получилось, программа при старте ругается на XML парсер и подсунуть ей другой не удалось.
Думаю, готовой СРЕДЫ Вы скорее всего не найдете, да и нет в этом никакой необходимости. Дело в том, что в линукс широко распространена идеология "набора инструментов", что позволяет пользователю создавать для себя УДОБНУЮ СРЕДУ ИМЕННО ДЛЯ НЕГО. Т.е. Вы можете на свой вкус подобрать себе понравившийся редактор текста программы (Kate и Geany - очень мощные и удобные в использоании редакторы с подсветкой синтаксиса и всеми необходимыми "приспособами"). Также на свой вкус можете выбрать и компилятор (я пользуюсь avra). В принципе, этих двух составляющих хватит для замены AVRStudio (кроме отладчика). Также вы можете приспособить утилиту make для облегчения жизни. Она позволит автоматизировать "рукопашную" работу.
В качестве утилиты для загрузки кода в МК я рекомендую использовать avrdude - очень мощная утилита, которую можно прицепить к любому текстовому редактору. Она поддерживает массу разнообразных загрузочных кабелей (в т.ч. USB). Кстати, в ближайшее время я хочу собрать USB-кабель USBasp для работы в полевых условиях с ноутбука (у него только USB).

Все выше перечисленные программы должны быть в репозиториях Убунту. Во всяком случае, в Дебиан, на базе которой постоена Убунту, есть все необходимые пакеты. Дополнительно придется скачать только мелкий файлик подсветки синтаксиса. Для Kate его можно загрузить прямо из меню настроек, а для Geany мне пришлось создать свой (могу выслать на почту или еще куда-нибудь).

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

Вот пример make-фпайла, которым я постоянно пользуюсь (для нового проекта нужно просто изменить переменную TARGET на имя главного ассемблерного файла):


ASM=/usr/bin/avra
ISP=/usr/bin/avrdude
TARGET=bcr-01
FUSE_BITS=-U lfuse:w:0x2f:m -U hfuse:w:0xC9:m
LOCK_BIS=-U lock:w:0x00:m

program : $(TARGET).hex
$(ISP) -p m8 -P /dev/parport0 -c blaster -U flash:w:$(TARGET).he x:i $(FUSE_BITS) $(LOCK_BIS)

$(TARGET).hex : $(TARGET).asm
$(ASM) -l list -m map $(TARGET).asm

.PHONY : clean
clean :
rm -f *.hex *.obj *.cof *.lst

В текстовом редакторе останется только задать горячую клавишу для выполнения команды $make, а утилита make сама просмотрит изменившиеся файлы, перекомпилирует их, соберет проект в кучу и запустит утилиту загрузки кода в МК. Вот так в один клик собирается, компилируется и загружается код в МК без всяких лишних телодвижений. Красота! :D

alldn
31.08.2009, 09:51
Спасибо, Михаил.
Собственно отладка мне не очень нужна, какие-то критичные фрагменты программы я обычно выделяю в отдельный проект и его уже отлаживаю, на целом проекте отлаживать не получается, в отладчике год будешь ждать, пока программа дойдет до нужной точки останова. Отлаживаю все дома на ХР, а это хотел еще на работе при появлении свободного времени (в перерыв) малость позаниматься.
Вполне устроит редактор с подсветкой и транслятор.
Я не сильно крутой спец по Линуксам, поэтому теперь буду осознавать, что Вы мне написали. :-)
Если что-то будет непонятно, еще спрошу.

blindman
31.08.2009, 11:37
Я использую vim в связке с avr-gcc/avr-as - рекомендую попробовать. Если привыкли к работе под Windows - может показаться непривычным и неудобным, но если не пожалеть немного времени на изучение, приходит понимание удобства и мощи этого редактора. Тут вам и подсветка, и компиляция, и вызов программатора не выходя из редактора, и куча всяких вкусностей, о которых в двух словах не расскажешь :)

alldn
31.08.2009, 12:38
Спасибо всем откликнувшимся. Попробовал поставить все рекомендованное. Больше всего понравился редактор Geany. По сути дела ничего добавлять не пришлось, все есть встроенное, даже ассемблер можно сразу запускать, диагностика результата вся видна.
Подсветка синтаксиса есть, немного не та, что в Студио, но это не страшно, постепенно скорректирую.

Придется наверное делать теперь USB программатор. На этом ноутбуке нет LPT порта, а домашний ноутбук работает с AVReal немного глючно.

Mike53
31.08.2009, 15:35
Придется наверное делать теперь USB программатор. Да, видмо, пришло время уходить с lpt/com-кабелей. Как уже говорил выше, точу лапы под USBasp. Правда, там тоже стоит мега8/48, которую придется все же один раз чем-то прошить :)

Немного офф-топа по поводу линуксов и т.п. Я на основании своего личного опыта заявляю - нет тут никаких трудностей. Говорю как на духу и не пытаюсь ничего преукрасить. Не без удивления для себя самого обнаружил, что многие вещи под линуксом делаются на порядок проще, нежели под виндами. На линукс я перешел года полтора назад и вот уже больше года использую в своей ежедневной работе только его. Не считаю это каким-то спортом, самоистязанием или личным подвигом, просто тут лично мне НАМНОГО УДОБНЕЕ - это факт! :) Главное в работе с линукс не пытаться применять приемы работы виндоус :) Это очевидно, но почему-то 90% начинающих спотыкается на этом. Это профессиональный инструмент и требует соответствующего подхода, взамен давая превосходный результат.

Mike53
31.08.2009, 15:48
Я использую vim в связке с avr-gcc/avr-as - рекомендую попробовать.
Пару раз имел дело с текстовым VIMом. Чувствуется сила, но чтобы начать им эффективно пользоваться, потребуется минимум неделя ненапряженного рабочего графика, чтобы можно было спокойно учиться без спешки, улавливая на ходу что к чему.
Как раз сейчас у меня выдалось небольшое окошечко и надо будет ЗАСТАВИТЬ себя (именно заставить) засесть за вим.

Кстати, для себя лично почерпнул одну важную "ВКУСНОСТЬ" идеи набора инструментов. Дело в том, что в виндоус для каждого рода МК производители лепят свои среды, и каждый раз при пересадке на что-то новое приходится привыкать к новой среде. А набор инструментов позволяет конструировать себе среду на свой вкус. Если я привык к одному редактору, то он у меня так и остается единственным и для PICов, и для AVRов, и для ARMов и для 51ых. Меняется только компилятор,

blindman
31.08.2009, 20:52
чтобы начать им эффективно пользоваться, потребуется минимум неделя ненапряженного рабочего графика, чтобы можно было спокойно учиться без спешки, улавливая на ходу что к чему
Я на работе провожу за тестовым редактором 90% времени, поэтому в своё время изучить вим получилось без особого напряга. Сейчас если приходится работать на чужой машине под Windows в первую очередь ставлю вим. Под линухом проблем с этим нету, он в большинстве случаев ставится.

Чем особенно нравится vim - что буквально каждый день день открываешь новые возможности. Казалось бы, уже знаешь его вдоль и поперёк - ан нет, оказывается есть ещё возможности которые делают работу удобнее. Хотя может для тех кто не пишет код по 8 часов в день только на работе, это не понятно :)

Есть весёлый момент - если без предварительного чтения документации в первый раз запустить вим в консоли и вовремя не догадаться нажать F1 - можно долго гадать - а как же из него выйти :lol: Наверно именно поэтому команда выхода прописана впервых строках хелпа

alldn
31.08.2009, 20:54
Сегодня полностью попробовать собрать проект не смог, забыл дома некоторые include файлы. Завтра попробую.
Процедуру компиляции включил сразу запуском AVRA с параметрами.
Как использовать make утилиту тоже пока не дошло. Пробовал в параметрах проекта в запуске указывать make mymake - файл в котором сохранил рекомендованный скрипт, поменяв имя головного файла, но запуска утилиты не получилось - говорит нечего макать :-)

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

vadim_d
31.08.2009, 21:07
Как использовать make утилиту тоже пока не дошло. Пробовал в параметрах проекта в запуске указывать make mymake - файл в котором сохранил рекомендованный скрипт, поменяв имя головного файла, но запуска утилиты не получилось - говорит нечего макать :-)
Да, тут тонкость: нужно после make давать ту метку в makefile, которую хотите пересобрать. В примере были "clean", "program" и "bcr-01.hex" определенная через переменную "TARGET". Команда "make program" должна пересобрать программу и залить ее.

Mike53
01.09.2009, 08:27
Пробовал в параметрах проекта в запуске указывать make mymake - файл в котором сохранил рекомендованный скрипт, поменяв имя головного файла, но запуска утилиты не получилось - говорит нечего макать :-) Утилита make ищет в текущей директории файл makefile или Makefile.
Вообще-то, при написании программ на ассемблере make-файл сильно крутить не требуется (как я уже говорил, нужно выставить только название проекта, ну и еще тип процессора в строке avrdude). В принципе, совсем не лишним было бы разобраться и с форматом make-файла. Там ничего суперсложного нет и даже по примерам можно легко разобраться что к чему. Это позволит переложить на плечи машины много рукопашной работы, если таковая вообще требуется.


Да, тут тонкость: нужно после make давать ту метку в makefile, Это называется "цель" :) В приведенном файле целей всего две: "programm" и "clean". Если после команды make не вводить никаких аргументов (целей), то по умолчанию выполнится первая попавшаяся цель из мэйк-файла (т.е. "programm"), которая просмотрит входящие файлы (в данном случае файл прошивки) и сравнит дату их создания с датами исходных файлов (т.е. ассемблерных файлов) и если они не изменились, то просто зальет hex-файл в МК. Соответственно, если исходники моложе прошивочных файлов, то утилита make заново пересоберет (если проект иерархический) изменившиеся файлы и те, в которые они входят, а затем откомпилирует весь собранный заново проект.

В данном случае, такая мощь make не требуется, ибо зачастую собирать-то нечего: часто программы на ассемблере состоят из одного файла, в которые входят только неизменяющиеся заголовочные файлы и сам компилятор выполняет всю работу. Другое дело, если программа пишется на Си.

Тем не менее, полезность утилиты make может проявиться в автоматизации различных дополнительных преобразований кода. Иногда возникает необходимость сгенерировать внешней утилитой какой-то участок кода (например, таблицу кодов знакогенератора, таблицу преобразования кодов, текстовые строки в какой-нибудь специфической кодировке (например, хотим составить сообщение на русском языке для какого-нибудь хитрого ЖК-индикатора, в котором производитель заложил собственную кодировку и чтобы не мучиться, можно состряпать внешнуюю программку, которой будем подсовывать текстовый файл, а нв выходе получать ассемблерный файл, который в свою очередь, будем подсовывать include-ом в основной файл программы)). Вот тут make сослужит добрую службу.

alldn
01.09.2009, 08:42
Есть весёлый момент - если без предварительного чтения документации в первый раз запустить вим в консоли и вовремя не догадаться нажать F1 - можно долго гадать - а как же из него выйти :lol: Наверно именно поэтому команда выхода прописана впервых строках хелпа
Чукча не дурак, чукча закрыл консоль и все :-)

Попробовал собрать проект - блин, AVRA считает ошибкой то, что в AVRStudio проходило нормально.
Для прямого доступа к регистрам я использую сегмент данных с нулевого адреса, а avra этого не понимает. Говорит, DSEG с 60h адреса.
"А на это я пойтить никак не могу"! (Бриллиантовая рука) :-)

Да, а собирать мне проект все-таки приходится, но делает это все компилятор. В проекте около 10 ассемблерных файлов, но они связаны инклюдами, так что ассемблер все делает сам.

Mike53
01.09.2009, 08:56
К использованию убунту подхожу уже второй раз. Первый раз плюнул после того, как выяснил, что работает этот хваленый убунту медленнее ХР. Теперь вот пробую на более шустром ноутбуке. Медленно работает не линукс, а графическое окружение пользователя :) По умолчанию, убунту оооочень сильно перегружена различными сервисами "на все случаи жизни". Кроме того, вроде как никто и не скрывает, что Убунту - один из самых "тяжелых" дистрибутивов. По этой причине я использую Дебиан, на базе которого построена Убунту, но без всяких "свистелок-бантиков" и прочих украшательств. В качестве окружения пользователя использую lxde. Эта связка просто летает как угорелая на нетбуке eeePC1000 (который я использую для полевых работ). Лично я сам не пробовал на нем запускать ХР, но очевидцы утверждают, что скорость работы оставляет желать лучшего. И еще - мой любимый пример из жизни. Валялся у меня под столом старый селерон 600МГц, память - архаичная sdram 100МГц (!). Ставил на него ХР, так только что установленная система без каких-либо антивирусов и вообще чего-либо дополнительного в режиме ожидания отрисовывала курсор мыши 4 раза в секунду (!), меню Пуск открывалось реально на глазах в течении секунд пяти. Так эта машинка бы и валялась, пока я не попробовал live-cd Knoppix (опять все тот же дебиан, только на живом диске, т.е. запускается с cd-rom без участия винчестера вообще). На нем и графический интерфейс работал вполне удовлетворительно и вообще можно было бы использовать эту систему в качестве полноценной рабочей станции. Так что в низкой производительности ОС линукс упрекать бессмысленно: она и процессорные ресурсы и особенно память использует весьма и весьма рационально. Кроме того, политика безопасности и распределения прав доступа в линукс, как и в unix-системах вообще, реализована на порядок лучше и "грамотнее" (ибо изначально все юниксовые системы стояли еще на тех компах, которые занимали целые помещения и этажи зданий, а пользователи исчислялись тысячами и работали они все одновременно... тут без грамотной политики прав доступа не обойтись). Это одна из веских причин, по которой вирусам просто негде послелиться (с учетом того, что их для юниксовых систем вообще мало) :) Так что на ряду с удобством, я еще забыл и про антивирусные программы и ежедневную борьбу с "заразой". :)

Mike53
01.09.2009, 09:12
AVRA считает ошибкой то, что в AVRStudio проходило нормально.
Для прямого доступа к регистрам я использую сегмент данных с нулевого адреса, а avra этого не понимает
Да, в документации сказано, что синтаксисs avra и avrasm2 отличаются, но в данном случае дело не в этом. Видимо, разработчики не учли данный прием работы :) . Тут надо разобраться в чем именно дело. Возможно, достаточно просто изменить начальный адрес (что-то типа ram_start или что-то в этом роде) заголовочный файл, чтобы компилятор не ругался на попытки обращения к адресам, выходящим за указанные рамки. Либо просто воспользоваться другим компилятором, который будет компилировать "как avrasm2".

Кстати говоря, мне и самому стало жутко интересно. Надо попробовать покопаться и поразбираться. А еще надо поискать компиляторы с более человеческим объявлением макроопределений и объявления псевдонимов типа #define led_bit PORTB,0


В проекте около 10 ассемблерных файлов, но они связаны инклюдами, так что ассемблер все делает сам. Вот-вот, про это я и говорил, но все же программисты не зря для себя создавали make :)

alldn
01.09.2009, 09:22
Именно на безопасность и увеличение скорости я надеялся, когда ставил убунту на старенький ноутбук С500, 256Мб памяти. Немного, но ХР работает сносно. А убунту значительно тормознее. Сетовать на то, что это графическая оболочка тормозит его не стоит, в ХР тоже графическая оболочка, но работает она быстрее, несмотря на то, что там для обеспечения относительной безопасности крутился антивирус и firewall Outpost.
После битвы, когда я побеждал одну трудность за другой, то VPN, то еще что-то, те вещи, которые делаются с винде одним кликом мышки, да еще увидев насколько это все медленно работает, я все снес, и для себя сделал вывод, что как интернет сервер, как межсетевой экран альтернативы линуксу нет, ну а в качестве домашней машины линукс сильно отстал.

А сейчас на работе все машины должны быть с лицензированным ПО, Vista меня задолбала тормознутостью. Для работы мне нужен только Офис, да почта-интернет. Опен офис конечно *****ьный, полноценно работать с ним нельзя, но мне пойдет.
Ну вот и надумал в качестве дополнения поставить себе AVR транслятор. Но наверное проще VMWARE использовать.

По поводу заголовочного файла я тоже подумал. Но RAMEND там есть а RAMSTART не нашел.

blindman
01.09.2009, 09:33
Для прямого доступа к регистрам я использую сегмент данных с нулевого адреса, а avra этого не понимает. Говорит, DSEG с 60h адреса.
"А на это я пойтить никак не могу"! (Бриллиантовая рука) Smile
А можно посмотреть код, как это выглядит? Мне кажется, что вы что-то делаете неправильно. С нулевого адреса РОНы идут, какой смысл к ним как к ОЗУ обращаться?

Mike53
01.09.2009, 09:36
Сетовать на то, что это графическая оболочка тормозит его не стоит, в ХР тоже графическая оболочка, но работает она быстрее Может быть я неправильно выразился, но именно графическая оболочка тормозит в случае с линуксом. Тут я немного поясню. Дело в том, что в виндоус существует только одна оболочка (explorer), которую пользователь менять не может, а в линукс этих оболочек существует великое множество. Точно не помню, но в Убунте стоит то ли Гном, то ли КДЕ4 - это довольно тяжелые оболочки. Я на хиленький нетбук установил "легковесную" оболочку - lxde (она так и расшифровывается, как Lightweight X-server Desktop Environment, т.е. легковесное окружение рабочего стола Х-сервера). Эта "оболочка" - просто бальзам на душу моей аскетичной натуры. В ней нет ничего лишнего, все предельно просто, но вместе с тем она красиво оформлена и смотрится совешенно достойно.


Но наверное проще VMWARE использовать. В качестве виртуальной машины могу порекомендовать virtualbox. Очень мне приглянулась именно за скорость работы. Распространяется бесплатно, вот только не знаю, есть ли у нее лицензионные ограничения при использовании на рабочей машине (т.е. в организации в коммерческих целях).

Mike53
01.09.2009, 09:39
С нулевого адреса РОНы идут, какой смысл к ним как к ОЗУ обращаться? Например, для косвенной адресации (т.е. адрес доступа к РОНу хранить в другом РОНе, с возможностью (пост)инкремента указателя адреса и т.п.) :) Хотя лично я пока еще не прибегал к данному приему.

blindman
01.09.2009, 09:39
А еще надо поискать компиляторы с более человеческим объявлением макроопределений и объявления псевдонимов типа #define led_bit PORTB,0
А их и искать не надо. avr-gcc прекрасно справляется с ассемблерными файлами (но синтаксис от атмеловского ассемблера отличается), и понимает все директивы препроцессора

alldn
01.09.2009, 09:43
Да, это так. Там регистры.
Дело в том, что я написал маленькую многозадачную ОС для меги. Написал уже несколько лет назад, но только теперь собрался ее реально использовать в очередном синтезаторе.
Делалось это для того, чтобы упростить программу синтезатора. Вместо сильно разветвленной программы с кучей условий я использую несколько линейных программ, независимых друг от друга, обменивающихся флагами или через глобальные переменные.

А обращение к регистрам как к области памяти мне нужно для самой ОС, когда она переключается с одной задачи на другую. При этом приходится сохранять все регистры, состояние, указатель стека и менять их на ранее сохраненные от другой задачи. Вот тут и приходится обращаться к памяти напрямую.

Mike53
01.09.2009, 09:44
А еще надо поискать компиляторы с более человеческим объявлением макроопределений и объявления псевдонимов типа #define led_bit PORTB,0
А их и искать не надо. avr-gcc прекрасно справляется с ассемблерными файлами (но синтаксис от атмеловского ассемблера отличается), и понимает все директивы препроцессора
Обязательно попробую в ближайшее время.
PS: В который раз убеждаюсь, что самое правильное решение всегда лежит прямо под носом, но меня почему-то тянет по самому трудному пути. "...мы не ищем легких путей..." (с) :)

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

Mike53
01.09.2009, 09:55
Да, это так. Там регистры.
Дело в том, что я написал маленькую многозадачную ОС для меги.. Я тоже частенько прибегаю к мультизадачной (с позволения сказать) микроядерной ОС. Хотя, ОС - это громко сказано... У меня это простой менеджер очереди задач, который передает управление поочередно нескольким параллельным процессам, которые, в свою очередь, выполняют определенную часть своего кода (отъедая заданную часть процессорного времени) и самостоятельно возвращают управление менеджеру, а тот уже смотрит кому выдать управление дальше. Можно преостанавливать некоторые процессы принудительно, число задач ограничено только объемом памяти под стек для сохранения основных переменных и указателей на место передачи управления для каждого из процессов.

Такие менеджеры очередей задач я делал и для ПИКов (16-го и 18-го семейств), и для АВРов (90s, мега, тини), и всегда обходился без прямого обращения к РОНам. Просто операции обращения к пространству ОЗУ в АВРах кушает 2 маш.цикла, а это не всегда выгодно. Вот к указателю стека напрямую обращаться весьма удобно для сохранения адреса, по которому в очередной раз необходимо будет передать управление процессу.

Для себя сделал вывод, что применение такого подхода сильно упрощает алгоритм работы программы в целом. По сути, очень сложный алгоритм разбивается на группу простых процессов (циклов), обменивающихся при необходимости данными и сигналами синхронизации.

alldn
01.09.2009, 10:03
Да, ОС - это очень громко сказано. Тупая карусель. Даже без вытеснения. Т.е. каждая задача свой квант времени отгрызает в любом случае, не освобождает его и не отдает. Но мне собственно так и надо. Там у меня 8 задач и каждая крутится в цикле. Даже в некотором смысле удобно. Сейчас у меня еще 3 задачи не задействованы, вместо них стоит цикл сам на себя, но свое время они берут и при добавлении на их место реальных задач общее быстродействие системы остается неизменным.
ОС конечно примитивная, теперь вижу ее недостатки, но в данной программе мне придется как-то обходить их программно.

blindman
01.09.2009, 10:04
А обращение к регистрам как к области памяти мне нужно для самой ОС, когда она переключается с одной задачи на другую. При этом приходится сохранять все регистры, состояние, указатель стека и менять их на ранее сохраненные от другой задачи. Вот тут и приходится обращаться к памяти напрямую.
Я так понимаю, у Вас код примерно такой:


.dseg
.org 0
reg0 .byte 1
reg1 .byte 1
reg2 .byte 1
......


Но ведь адреса регистров фиксированы, и ничто не мешает написать так:


.equ .reg0 = 0
.equ .reg1 = 1
.equ .reg2 = 2
......


Ассемблер отработает точно так же


Похоже тут Осе-писатели собрались :) Я тоже экспериментирую с многозадачностью на микроконтроллерах AVR, правда свои ОС на C пишу. Сохранение/восстановление контекста разумеется на ассемблере. И не было нужды обращаться к регистрам как к памяти. Интересно было бы понять, зачем это? Единственное, что приходит в голову - это экономия памяти программ ценой увеличения времени переключения

Mike53
01.09.2009, 10:05
Кстати, если будете работать с АРМами, то в некоторых из них есть еще очень полезная аппаратная фича - MMU (Memory Management Unit). Эта штука позволяет выделывать очень и очень интересные вещи с памятью. Тут есть большое поле для полета мысли при разработки самодельных микроядерных ОСей. Тут уже можно принудительно "конфисковывать" управление, можно динамически создавать раздельные ЛОГИЧЕСКИЕ адресные пространства (т.е. одно адресное пространство можно разделить на несколько логических, каждое из которых будет начинаться с нулевого адреса и при этом командам можно запретить обращение к ячейкам памяти, за пределами выделенного пространства - по сути, можно запускать несколько совершенно разных программ в одной физической памяти, и они даже не будут "знать" о существовании соседей и не смогут никак им "навредить", случайно затерев их код или переменные). К слову сказать, АРМы постоены по фонНэймановской архитектуре и имеют единственное сплошное 32-разрядное адресное пространство 32-разрядных слов.
АРМ - весьма и весьма "вкусная" штука для реализации сложных алгоритмов управления и "больших" вычислений.

alldn
01.09.2009, 10:18
У меня сделано так:


; ******************** ******************** ******************** ***
; ОЗУ
.DSEG
;----------------------------------------------------------------
; рабочие регистры R0-R31
.ORG 0x0
Reg: .BYTE 32
;
;status + stack
.ORG 0x5d
SS: .BYTE 3
;
.ORG 0x60
;----------------------------------------------------------------
; ОЗУ, используемое ядром ОС
; Области хранения контекста процессов
proc0: .BYTE 32 ;(регистры)
ps0: .BYTE 3 ;SREG,SPH,SPL
.BYTE 26 ;stack
stack0: .BYTE 1 ;указатель на начало процесса
.BYTE 2


proc1: .BYTE 32 ;(регистры)
ps1: .BYTE 3 ;SREG,SPH,SPL
.BYTE 26 ;stack
stack1: .BYTE 1 ;указатель на начало процесса
.BYTE 2

.................... ..

Перегружается все через Z+, но писалось правда давно, теперь уже и лезть туда, что-то улучшать и оптимизировать не хочется.
К тому-же лучшее - это злейший враг хорошего :-)

Mike53
01.09.2009, 10:23
Интересно было бы понять, зачем это? Я не могу говорить за автора, но на мой взгляд прямой доступ к РОН полезен при выполнении серии однотипных операций над группой последовательно расположенных РОН. При этом на РОНы нужно натравить указатель, а саму процедуру/функцию обработки завернуть в цикл. Тем самым мы получаем вместо развернутой последовательности однотипных операций над РАЗНЫМИ регистрами мы получаем циклических вызов ОДНОЙ операции, которая косвенно обращается к группе РОНов через указатель.
Насколько это эффективно, снаскоку не оценить.

Вообще, насколько я понимаю, Алесандра больше заботит некоторая несовместимость синтаксисов компиляторов. С этим, конечно, придется либо мириться (отказавшись от полной совместимости кодов avrassembler2), либо пользоваться родным софтом в неродной среде (т.е. либо api-адаптером wine, либо одной из виртуальных машин: virtualbox, vmware, либо даже эмулятором аппаратуры типа qemu и ему подобных, которые эмулируют работу процессора и аппаратуры вообще - естественно, последний вариант самый медленный и неоправданный).

blindman
01.09.2009, 10:24
Достаточно переписать верхнюю часть вот так, и avra должен этот код откомпилировать


;----------------------------------------------------------------
; рабочие регистры R0-R31
.equ Reg = 0
;
;status + stack
.equ SS = 0x5d

; ОЗУ
.DSEG
.ORG 0x60
;----------------------------------------------------------------

alldn
01.09.2009, 10:26
Да, собственно по программе у меня вопросов нет, попробую поставить virtualbox, посмотрю как это все работает. Да и wine у меня старенький стоит, надо обновить.

Достаточно переписать верхнюю часть вот так, и avra должен этот код откомпилировать
Ну да, наверное так. Можно попробовать. Раньше такой задачи не стояло, я и не задумывался об этом. Спасибо.

alldn
01.09.2009, 10:34
Случилось чудо, друг спас жизнь друга!!!
скомпилировалось без ошибок :-)

Mike53
01.09.2009, 10:46
Хех, пока писал свои предположения, Александр меня уже опередил. :)
Насколько я понимаю, проблема именно в том, что авра ругается на директивы резервирования ячеек ОЗУ, лежащих за пределами этого самого ОЗУ. Тут я blindman согласен - надо просто объявить псевдонимы через equ, чтобы компилятор не пытался проверять "попадаемость" меток в физическое адресное пространство. В этом смысле, аврассемблеру минус, что он разрешает резервировать память, которой нет :)
Короче, то, что лежит за пределами ОЗУ надо объявить через equ, а то что в нем, уже можно резервировать автоматически директивами .byte

Проблема, как я понимаю, снята, но я уже загорелся avr-gcc :) Уж очень хочется директив препроцессора :) Вот как раз на подходе проект, который целиком на ассемблере реализовать будет довольно трудно. Вот как раз и займусь поплотнее Си для АВР и заодно другой компилятор ассемблера погоняю :)
Спасибо, blindman, за очень своевременные подсказки :)

PS: хочу выразить Александру огромную благодарность за его (с соавтором-тезкой) замечательные конструкции, постоянно вдохновляющие меня на очередные этапы создания собственных поделок. Правда, в этом плане моего опыта явно маловато, да и измерительных приборов практически нет. Но если я все-таки смогу "родить", наконец, свою портативку на 433МГц с питанием от 3,6В, то я непременно последую Вашему примеру и опубликую досканальную детальную информацию по проекту, если он вообще будет кому-то интересен.

alldn
01.09.2009, 10:56
Михаил, спасибо Вам за добрые слова, рад, что наша с Сашей работа нравится. Будет у Вас готова конструкция присылайте, размещу и у себя на сайте с непременным указанием авторства.
Мы кстати тоже собираемся обновить свою портативку, просто сейчас Саша сильно загружен и у него нет времени запустить уже собранную портативку, зашить в нее новую программу. А после этого мне нужно будет там немного переписать пару мест.
Портативка на 145 мгц, на 430 пускать ее не пробовали, хотя принципиальных ограничений там нет.
Сейчас озаботились КВ трансивером, вот он и отбирает все свободное время, которого и так-то не хватает.
Вот ссылка на фотографию будущего синтезатора
http://www.r3r.ru/index.php?option=com _fireboard&Itemid=29&func=view&catid=7&id=1742#1741

Mike53
01.09.2009, 11:13
Да, как только закончится аврал на работе, так сразу возьмусь за синтез и приемник. Синтез решил делать свой на lmx2326 и интегральным ГУНом с предусилителем (прекрасно осознаю, что это слишком крупный орех для моего уровня; не знаю, что получится, но жутко хочется попробовать). Приемник, ставший уже классическим, на 3362. А вот с РА у меня, чую, будет много проблем (да и с синтезом не меньше). Надеюсь, Вы в свободное время не откажете советом :) Иначе откуда ж "молодняку" еще черпать опыт? :)

alldn
01.09.2009, 11:19
По железкам - это Шатун. Я рисую цифровую часть и управление, пишу подо все это программу, а в аналоговой части мне до Саши как до Луны.
Но тем не менее конечно поможем, если будет нужда.

alldn
01.09.2009, 11:44
Сейчас самому стало интересно вспомнить, как это я достаю регистры через прямое обращение к памяти. Посмотрел и долго смеялся. Это наверное я в начале работы планировал так сделать, а потом отказался от этого метода. А объявление в начале программы осталось. Транслятор не ругался, я и забыл про это. А теперь вот выплыло. :-)
Забыл все, давно это было


;
; Мини операционная система
; Версия 0.01
; Начало разработки - 13 марта 2005 г.

vadim_d
01.09.2009, 21:44
Т.е. каждая задача свой квант времени отгрызает в любом случае, не освобождает его и не отдает.
Я часто делал совершенно "асинхронную" систему - был переключатель задач, который при вызове его из любой задачи передавал управление следующей. Ну а при написании каждой задачи надо было обязательно вставлять вызов переключателя в циклах ожидания событий и в длинные линейные участки вычислений. Даже на 8080, 8085 и Z80 удавалось обходиться без таймера.

alldn
01.09.2009, 21:59
Да, 8080 - это святое. Начинал на нем писать в 1984 году. В кодах, что такое ассемблер узнал позже. А сначала писал наизусть в кодах, считал адреса переходов... Вобщем работал ассемблером. :-)
А к мнемонике этого ассемблера настолько привык, что и сейчас пишу макросы под отсутствующие команды или просто если мне мнемоника не нравится.
Тут когда-то обсуждали мои первые конструкции, пробовали транслировать исходники частотомера на PIC и сетовали, что у меня неизвестный никому ассемблер, при трансляции обычным ассемблером выдается 50 ошибок. И никто не посмотрел, что первая ошибка была из-за того, что не найден файл с макросами. :-)
А мне так удобнее. Не могу я писать breq , мне проще и понятнее jz, ну и многие другие команды, отсутствующие в стандатрном наборе.

Mike53
02.09.2009, 14:55
Я часто делал совершенно "асинхронную" систему
...
Ну а при написании каждой задачи надо было обязательно вставлять вызов переключателя в циклах ожидания событий и в длинные линейные участки вычислений. Я тоже уже лет шесть использую именно эту технику. Пробовал и другие (в разного рода "экзотических" ситуациях), но эта мне нравится больше всего :) Помнится, первые опыты ставил на z80 еще в далеком 1996-ом году, уже тогда возможностей Sinclair-овского Бейсика явно не хватало и с неуемным интересом меня "засосало" в ассемблер. Ну, а там и до ве35 рукой подать :)

PS: Сейчас в очередной раз делаю "первые" потуги в работе с vim-ом :) Вроде бы неплохой вики-учебник нарыл http://ru.wikibooks.org/wiki/Vim
Первая фраза :
Продвинутый редактор — кошмар для случайного пользователя. на 100% характеризует мое личное впечатление, когда я впервые столкнулся с этим редактором :lol:

blindman
02.09.2009, 16:56
Цитата:
на 100% характеризует мое личное впечатление, когда я впервые столкнулся с этим редактором
Ага, это так у большинства, у меня так же было :) У меня опыт опыт работы с vim приличный (по работе пишу программы на разных языках, от ассемблера до PHP и Ruby), будут вопросы - надеюсь, смогу помочь.

Mike53
04.09.2009, 21:35
Эх, ма! Первый же вечер знакомства с Vim-ом показал часть его широких возможностьей, позволяющих значительно повысить эффективность редактирования. Вот простой пример: нужно удалить пять слов в строке; в "обычном" редакторе, мы подставляем курсор к началу первого слова и держим кнопку del пока не удалится нужное число символов, либо (в случае опытного пользователя) держим shift-ctrl и жмем несколько раз стрелку, чтобы выделить нужное количество слов, а потом тыкаем del. Казалось бы, операция не такая уж долгая (во втором случае), но ведь намного проще последовательно нажать всего три клавиши - d5w. Так можно удалять и заданное число строк или абзацев. К тому же, ни в одном редакторе я еще не встречал быстрого перемещения к началу/концу абзаца (весьма удобная функция для перескакивания по "абзацам" кода (т.е. функционально обособленным участкам текста программы, отделенных друг от друга пустыми строками).
Еще порадовала особенность навигации по тексту при помощи "буквенных" клавиш, что очень удобно при использовании слепого 10-пальцевого метода, т.к. нет необходимости постоянно снимать указательные пальцы с маркерных клавиш, а потом заново их искать наощупь. Это тоже очень сильно экономит время. А ведь если задуматься, то на таких простых операциях при составлении текста программы тратится львиная доля рабочего времени.

Очень приятно ощущать на практике пускай даже малую часть мощи профессиионального инструмента.

Вот еще неплохой самоучитель: http://www.gentoo.org/doc/ru/vi-guide.xml

RaD
15.09.2009, 15:38
Я не используй WinAVR, я пишу на ассемблере, потому меня интересовала именно AVRStudio или подобная оболочка с транслятором и отладчиком.
Доброе время суток. Сам сейчас мучаюсь с небольшим проектом http://easyelectronics.ru/forum/work-in-progress/topic-970. Сейчас встала необходимость средствами Linux скомпилировать .asm. Поставил пакет gcc-avr, нашёл там avr-as, но не могу сообразить какие именно ключи (я про архитектуру и прочее) указывать для ATtiny13.

P.S. Также рассматриваю вариант написания на Python простенького эмулятора ATtiny13. Пока размышляю как это лучше сделать.

alldn
15.09.2009, 15:56
Я поставил сейчас на линукса универсальный редактор Geany. Он хорошо работает, обеспечивает подсветку синтаксиса.
А в параметрах сборки указано использование линуксового ассемблера: avra -l %e.lst %f
Для того, чтобы указати тип процессора я обычно включаю в асм файл с определениями:


.NOLIST
.include "tn13def.inc"
.LIST

Это для ATtiny13. Сам inc файл можно взять из AVR Studio.
Транслируется все быстро и хорошо. Правда отладки никакой нет.
Можно еще подключить линуксовый программатор. Если он есть конечно...

RaD
15.09.2009, 16:00
Я для разработки (любой) использую Emacs, привык, очень удобно.

Видать у меня не совсем верный include файл, хотя скачал с atmel.com:

rad@fujitsu:~/devel/avr$ avra -l audiokvm.lst audiokvm.asm
AVRA: advanced AVR macro assembler Version 1.2.2 Build 94 (11. May 2007)
Copyright (C) 1998-2006. Check out README file for more info

Pass 1...
includes/tn13def.inc(40) : Error : Unknown mnemonic/macro: #ifndef
includes/tn13def.inc(41) : Error : Unknown mnemonic/macro: #define
includes/tn13def.inc(44) : Error : Unknown mnemonic/macro: #pragma
Можете поделиться файликом?

alldn
15.09.2009, 16:04
Это ассемблер не понимает условной трансляции. у меня на avra с этим проблем не было.

alldn
15.09.2009, 16:09
А это не от С inc файл?

RaD
15.09.2009, 16:10
Я не совсем понял ответ. "Этот ассемблер..."?
Из приведённого лога видно, что я использую avra, и если я правильно понял вас, то проблем быть не должно. Но раз они есть, может я что-то делаю неправильно?

alldn
15.09.2009, 16:14
INC файл, включенный в исходный текст какой-то не такой. как мне кажется. Может это не ассемблерный файл, а С?
Куда тебе выслать, я зашлю 2 сборки файлов от 2-х ассемблеров AVR Studio.

blindman
15.09.2009, 16:17
Взял код с http://dpaste.com/hold/93559/ , поменял в исходнике путь к файлу tn13def.inc (положил его рядом с исходником), avra без проблем скомпилировал. tn13def.inc из AVR Studio

blindman
15.09.2009, 16:20
INC файл, включенный в исходный текст какой-то не такой. как мне кажется.
Это файл для AVRAssembler2, а надо для AVRAssembler

blindman
15.09.2009, 16:23
andrey@debian:~/.wine/drive_c/Program Files/Atmel$ find -name 'tn13def.inc'
./AVR Tools/AvrAssembler/Appnotes/tn13def.inc
./AVR Tools/AvrAssembler2/Appnotes/tn13def.inc
andrey@debian:~/.wine/drive_c/Program Files/Atmel$

RaD
15.09.2009, 16:23
ruslan.popov @ gmail

alldn
15.09.2009, 16:24
Точно, сейчас посмотрел.
Значит нужно взять inc файл от первого ассемблера АВР Студио и проблемы отпадут.

alldn
15.09.2009, 16:31
Письмо вернулось, сказала нет такого адреса.
Забери с http://www.r3r.ru/appnotes.zip

RaD
15.09.2009, 16:34
Собралось! Спасибо.
Буду мучить код дальше.

RaD
15.09.2009, 16:45
Ещё возник вопрос. В какой спеке можно подсмотреть opcode для каждой операции. Хочу из полученного HEX иметь возможность восстановить команды. В спеке на ATtiny13 в списке команд указана только логика их работы, хотелось бы иметь возможность узнать код любой команды.

alldn
15.09.2009, 18:25
Наверное тут нет никакой трудности, ведь есть же дизассемблеры, значит есть и описание структуры команд. Где содержится опкод, где операнды, как они расположены...

RaD
15.09.2009, 20:34
Самое забавное, ответ на мой вопрос находится в файле list, который создаётся с помощью опции -l. Кстати, спеки по опкодам на сайте atmel.com так и не нашёл.

Исправляюсь: Надо было искать не "opcodes", а "instruction set" http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf.

RaD
17.09.2009, 16:56
Эмулятор ATtiny13 под любую ОС?
Оно есть у меня :lol:
Правда, пока поддерживает только тот набор команд, который используется в моей программе.
Пример сессии - http://dpaste.com/hold/94777/

Mike53
02.10.2009, 21:19
Значит нужно взять inc файл от первого ассемблера АВР Студио и проблемы отпадут. Боюсь соврать, но в inc-файле от "второго" авр-ассемблера достаточно закомментировать вышеуказанные конфликтные секции. Насколько я помню, никакой полезной смысловой нагрузки эти секции не несли (ибо нам достаточно иметь только объявления псевдонимов периферийных регистров и т.п.).

Mike53
02.10.2009, 21:20
в догонку:

Что-то я сильно отстал от темы (работы много было, а потом сразу отпуск :) )

RaD
02.10.2009, 23:48
http://github.com/RaD/emuattiny
Делюсь эмулятором. Патчи приветствуются.

tau
10.12.2010, 09:47
Может немного запоздало, но для Linux есть неплохой заменитель AVR-Studio - kontrollerlab. Ориентирован на работу под KDE, но будет работать под любым окружением.

Здесь краткое описание и ссылка на официальный сайт: http://mcontroller.opentoms k.net/index.php/Kontrollerlab
Здесь можно скачать пакеты для Fedora, Ubuntu, Slackware, Arch: http://sourceforge.net/projects/kontrollerlab/files/

Но сначала попробуйте найти его в своем репозитарии. Наверняка есть.
Для Ubuntu-подобных: sudo apt-get install kontrollerlab
Для Arch: sudo yaourt -S kontrollerlab
и т.д.

Vladimir-dl7pga
25.09.2011, 23:16
http://forum.qrz.ru/thread31733.html - тут я в режиме монолога описывал эксперименты НЕпрограммиста с различными ассемблерами, не входящими в WinAVR или AVR Studio. Может кому пригодится.

Kontrollerlab вроде бы больше не развивается.

В приложенном архиве include files от Ассемблера 1 фирмы Атмель, без директив #pragma, о которые спотыкаются ассемблеры

В другом архиве - взятый с форума http://elektronik-projekt.de файл цветовой подсветки filetypes.asm для IDE Geany, с показом строчки ошибки для ассемблеров AVRA и GAVRASM