Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: WinAVR Asssembler Makefile
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
MaUrJIu
Подскажите пожалуйста как создать makefile для программы на ассемблере. Заранее благодарен.
MaUrJIu
Кажется у него нет встроенного компилятора ассемблерного кода. Кто-нибудь знает как его подключить и настроить. Или дайте ссылку, что почитать. Заранее благодарен!
ReAl
Не просто есть, а без него никуда. Так как С/С++ и прочие компиляторы GCC геренрируют ассемблерный код, который скармливается as-у (avr-as в случае avr-gcc).
И макросредства у того ассемблера вполне приличные, ну например
http://electronix.ru/forum/index.php?showt...mp;#entry821327


Всё почти так же, только в проекте не .c файл, а .S.
Т.е. makefile от этого не поменяется, если там уже была запись для обработки ассемблерных файлов (например, файл переключателя контекстов в scmRTOS). Только теперь метка main должна оказаться в ассемблерном файле.

Вот нашёл простую болванку проекта. Cтарый довольно, я с тех пор makefle переделывал. Сам makefile и вспомогательные .mak из каталога makefiles те же, что и для С-шных проектов.
В каталоге dummy -- собственно проект. Там добавлять другие .S файлы, они автоматом подхватятся и прилинкуются.
При этом используется та же "запускалка" (стартап), что и для С. Т.е. вектора инициализируюся, память данных инициализируется/чистится, в зависимости от секции.
Там, правда, практически пусто в смысле того, чтобы продемонстрировать работу с векторами прерывания или исползоваия инициализированных данных, но сейчас сил нет что-то добавлять.
MaUrJIu
Это конечно замечательно, но мне многое из написанного вами непонятно. А именно:
Цитата
была запись для обработки ассемблерных файлов (например, файл переключателя контекстов в scmRTOS)

Что это за запись и где она должна быть? Есть ли она в дефолтном файле? Вообще не представляю, что такое файл переключателя контекстов в scmRTOS.
Цитата
вспомогательные .mak

Не использовали и не читал об этих файлах, поэтому не знаю что это такое и зачем оно нужно.
Главное
1. Файл обязательно должен быть с расширением ".S"?
2. Обязательно в сырце ставить метку main и для чего она нужна?
Я хочу скомпилировать код программной реализации интерфейса uart взятый с atmel (сейчас эта страница недоступна почему то, поэтому прилагаю исходник и описание). Если есть такая возможность, подскажите что же все таки я делаю не так. Заранее благодарен!
ReAl
Цитата(MaUrJIu @ Jul 16 2011, 12:03) *
Что это за запись и где она должна быть? Есть ли она в дефолтном файле?
Запись в makefile (про этот же файл вопрос) для обработки ассемблерных файлов.
«дефолтный файл» — для кого «дефолтный»? Или имеются ввиду встроенные в утилиту make правила?

Цитата(MaUrJIu @ Jul 16 2011, 12:03) *
Вообще не представляю, что такое файл переключателя контекстов в scmRTOS.
Ассемблерный файл в проекте scmRTOS.
Несущественно. Просто первый пришедший в гоолову пример включения в С/С++ проект асемблерного файла для выполнения той работы, которую нужно делать на ассемблере.

Цитата(MaUrJIu @ Jul 16 2011, 12:03) *
Не использовали и не читал об этих файлах, поэтому не знаю что это такое и зачем оно нужно.
Язык утилиты make позволяет в «корневой» make-файл включать по include другие файлы. Удобно вынести в них общую часть, не меняющуюся от проекта к проекту. Для удобстава многие дают таким файлам расширение .mak или .mk.

В том архиве рабочий проект, настолько рабочий, что, созданный под WindowsXP несколько лет назад и провалявшийся на задворках винчестера, перед отправкой собрался для проверки под линуксом.
avr-gcc -- «он и в Африке avr-gcc».
Смотрите, как оно устроено.
Нужно или в командной строке (например, в FAR-е) набрать команду make в каталоге dummy, или оболочке-редактору (например Programmer Notepad из WinAVR) сказать, что файлы проекта лежат там и make запускать в том каталоге.

Мне начинает казаться, что Вам нужно почитать что-то про управление сборокй при помощи утилиты make.

Цитата(MaUrJIu @ Jul 16 2011, 12:03) *
1. Файл обязательно должен быть с расширением ".S"?
2. Обязательно в сырце ставить метку main и для чего она нужна?
Я хочу скомпилировать код программной реализации интерфейса uart взятый с atmel (сейчас эта страница недоступна почему то, поэтому прилагаю исходник и описание). Если есть такая возможность, подскажите что же все таки я делаю не так. Заранее благодарен!
1. В GCC принято ассемблерным файлам, использующим дирекивы С-шного препроцессора (#include/#define и компания) давать расширение .S, файлам, не использующим такого, давать расширение .s
Поскольку я во всех ассемблерных файлах использую препроцессор (хотя бы в виде #include <avr/io.h>), makefile рассчитан на расширение .S
2. Предлагаемая болванка проекта, как уже сказано, рассчитана на применение идущего в комплекте avr-gcc кода start-up. start-up заполняет таблицу векторов, инициализирует стек, инициализирует статические данные и обнуляет зарезервированное под переменные место, после чего делает переход на метку main. Так что она должна быть в каком-то из файлов и должна быть объявлена публичной.
3. Примеры от атмел, если ничего не поменялось, рассчитаны на AVR Studio с её AVRASM/AVRASM2. Так что под avr-as их ещё придётся переделывать.
MaUrJIu
Цитата
Примеры от атмел, если ничего не поменялось, рассчитаны на AVR Studio с её AVRASM/AVRASM2.

Действительно. В AVR Studio все замечательно работает.
Цитата
Мне начинает казаться, что Вам нужно почитать что-то про управление сборокй при помощи утилиты make.

Вам правильно, но я не знаю где можно об этом почитать. laughing.gif
Да, и еще вопрос: если настроить usart на подчиненный синхронный режим передачи данных и соединить rxd с txd, то такая схема будет работать?
P.S. Обмен данными с микросхемкой в полудуплексном режиме, у нее данные по одному сигнальному проводу идут.
MaUrJIu
Подскажите плиз где находится бит ddr_xck (управляет режимом синхронной работы usart - ведущий 0 или подчиненный 1) у atmega8? В дш просто он упоминается и все.
alexeyv
У USART есть два пина для приемника(RXD) и передатчика(TXD) соответственно. В случае с синхронным режимом добавляется третий - тактовая частота (XCK). Разумным было бы его (XCK) искать рядом с двумя остальными.
RXD - PD0
TXD - PD1
XCK - PD4
,то есть для управления надо менять значение порта D.4. Для слейва DDRD &= ~(1<<4), для мастера DDRD |= (1<<4)

MaUrJIu
Цитата
Для слейва DDRD &= ~(1<<4), для мастера DDRD |= (1<<4)

Спасибо. Теперь все понятно. DDR_XCK это DDRD.4
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.