Программа на ассемблере

Общие вопросы функционирования и программирования МК, обсуждение типовых алгоритмов...
Ответить
wypuk
Читатель
Читатель
Сообщения: 5
Зарегистрирован: 20 сен 2014, 19:39

Программа на ассемблере

Сообщение wypuk » 12 янв 2015, 01:08

Сделал себе библиотеку файлов с адресами регистров и бит такого вида:

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

ADC1_Offset     EQU   0x00012000
ADC2_Offset     EQU   0x00012100
ADC3_Offset     EQU   0x00012200

ADC_SR          EQU   0x00

ADC1_SR_Offset  EQU   ADC1_Offset + ADC_SR
ADC2_SR_Offset  EQU   ADC2_Offset + ADC_SR
ADC3_SR_Offset  EQU   ADC3_Offset + ADC_SR

ADC1_AWD        EQU   (0x42000000 + (ADC1_SR_Offset * 32) + (0x00 * 4))
ADC1_EOC        EQU   (0x42000000 + (ADC1_SR_Offset * 32) + (0x01 * 4))
ADC1_JEOC       EQU   (0x42000000 + (ADC1_SR_Offset * 32) + (0x02 * 4))
ADC1_JSTART     EQU   (0x42000000 + (ADC1_SR_Offset * 32) + (0x03 * 4))
ADC1_START      EQU   (0x42000000 + (ADC1_SR_Offset * 32) + (0x04 * 4))
ADC1_OVR        EQU   (0x42000000 + (ADC1_SR_Offset * 32) + (0x05 * 4))
Как подключить библиотечные файлы, чтобы все эти константы были видны в любом месте проекта?
Дело в том, что проект разбит на много файлов. В любом файле проекта могут потребоваться эти константы.
Если подключать библиотечные файлы директивой Include в каждом файле проекта, то выскакивает ошибка: "множественное определение константы в разных файлах".
Ели не подключать - значение "const" не определено! Как мне быть?

Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 2932
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Программа на ассемблере

Сообщение rhf-admin » 12 янв 2015, 08:40

Проект в uVision? А можно его посмотреть? Ну чисто чтоб поэкспериментировать.
С уважением, администрация сайта.

wypuk
Читатель
Читатель
Сообщения: 5
Зарегистрирован: 20 сен 2014, 19:39

Re: Программа на ассемблере

Сообщение wypuk » 12 янв 2015, 09:32

Да не вопрос. Keil uVision 4.73
https://yadi.sk/d/jY0VA6_iduhMf - сам проект.
https://yadi.sk/d/tGMEjyhAduhMs - либы.
Проц Stm32 F429

Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 2932
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Программа на ассемблере

Сообщение rhf-admin » 12 янв 2015, 11:42

А у меня нормально всё ассемблирует при добавлении этих либ в Handlers.s и в Init.s директивами GET, только слинковать не может.
Пришли целиком проект, в одной папке. Либы у тебя где лежат? В папке с проектом или ещё где-то?
А сценарий линковщика какой? Мне линковщик пишет - не найден файл ..Libraries\ADC.lib, потом ещё что-то там про scatter-файл и линковка завершается с ошибкой.
С уважением, администрация сайта.

wypuk
Читатель
Читатель
Сообщения: 5
Зарегистрирован: 20 сен 2014, 19:39

Re: Программа на ассемблере

Сообщение wypuk » 12 янв 2015, 12:53

Это проект полностью. Сам проект в одной папке, либы в соседней, но не в папке с проектом. Я их в параметрах проекта на вкладке ASM в поле "путь" указывал .
Либы добавлял в Handlers.s и в Init.s директивой Include, но в принципе это то же что и GET.
Вот и у меня линкер ругается, что все эти константы определены в обоих файлах Handlers.s и в Init.s.
А если их включить только в один из них, то ругается что в другом файле какие-то из используемых констант не заданы.
Со scatter-файлом все нормально должно быть - настраивал, как в Ваших статьях, да и без файлов Handlers.s и Init.s (с парой корректировок в коде) все нормально линковалось.
Сценарий линковщика стандартный, только в поле misc.. добавил --Entry RESET. Это же можно посмотреть в свойствах проекта. Я тебе его целиком отправил. Они кажись в проекте сами прописываются где-то. А так я в этих сценариях не понимаю ни черта.

wypuk
Читатель
Читатель
Сообщения: 5
Зарегистрирован: 20 сен 2014, 19:39

Re: Программа на ассемблере

Сообщение wypuk » 12 янв 2015, 14:51

Убрал из библиотечных файлов все директивы EXPORT и вроде все собралось без ошибок.

Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 2932
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Программа на ассемблере

Сообщение rhf-admin » 12 янв 2015, 17:33

Ну в общем-то логично. Директиву EXPORT используют когда хотят кусок кода сделать доступным в другой части программы (в другом файле). А GET/INCLUDE просто вставляет целиком текст из файла как есть.
Ну так тебе это и нужно, ты же не код вставляешь, а директивы, т.е. не программу, а просто текст. Эти файлы нужно пометить в менеджере проекта как текстовые, убрать из них все EXPORT, END, AREA (зачем они в тексте нужны) и вставлять куда надо с помощью GET или INCLUDE.
А lib-файлы, насколько я понимаю, это вообще нечто другое, они должны быть бинарниками.
С уважением, администрация сайта.

wypuk
Читатель
Читатель
Сообщения: 5
Зарегистрирован: 20 сен 2014, 19:39

Re: Программа на ассемблере

Сообщение wypuk » 12 янв 2015, 17:45

Эти файлы нужно пометить в менеджере проекта как текстовые, убрать из них все EXPORT и END (зачем они в тексте нужны) и вставлять куда надо с помощью GET или INCLUDE.
А lib-файлы, насколько я понимаю, это вообще нечто другое, они должны быть бинарниками.
Lib расширение - это просто результат моих попыток найти решение проблемы)) Изначально было расширение ".s", я его пробовал изменять - думал поменяет ситуацию)).
Как я могу их пометить как текстовые? Не помню чтобы там была подобная опция. Или просто поменять расширение на .txt?

Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 2932
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Программа на ассемблере

Сообщение rhf-admin » 12 янв 2015, 17:57

Нет, расширение можно не менять. Надо в проекте ткнуть на самом файле и выбрать "Options for File...", там на вкладке Properties в пункте File Type выбрать Text Document File.
После этого, все эти lib-файлы станут компилятору совсем неинтересны, но текст из них куда надо будет по-прежнему вставляться.
С уважением, администрация сайта.


Ответить