Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Използване на готови дефиниции в асемблерен файл?
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=19686
Страница 1 от 1

Автор:  xor [ Съб Мар 21, 2026 5:47 pm ]
Заглавие:  Използване на готови дефиниции в асемблерен файл?

Средата е CubeIDE.
В main.c чрез поредица от инклудвания попада и stm32h723xx.h.
В stm32h723xx.h има дефинирано GPIOA_BASE.
Естествено в main.c мога да напиша:
uint32_t var = GPIOA_BASE;

Имам обаче и interrupt.s където GPIOA_BASE не се вижда!
В interrupt.s не мога да напиша:
#include stm32h723xx.h
защото асемблерът не разбира повечето неща съдържащи се в stm32h723xx.h!

Вариантът с повторно дефиниране в асемблерния файл не ми допада защото:
1. Трябва да напиша отново над 50 дефиниции.
2. Все ми се струва, че има и по-елегантен начин.

Нивото ми е твърде любителско и предполагам, че просто не се досещам за правилното решение...

Автор:  vesko_hard [ Съб Мар 21, 2026 10:12 pm ]
Заглавие:  Re: Използване на готови дефиниции в асемблерен файл?

Chat GPT казва.....

използвай .S вместо .s (най-чистото решение)

Ако преименуваш файла от:

interrupt.s → interrupt.S (главно S!)

той ще мине през C preprocessor, преди да се асемблира.

Тогава вече можеш спокойно:

#include "stm32h723xx.h"

LDR R0, =GPIOA_BASE

✔ Това е най-добрият и препоръчван подход в CubeIDE.

Автор:  xor [ Нед Мар 22, 2026 12:31 pm ]
Заглавие:  Re: Използване на готови дефиниции в асемблерен файл?

Благодаря! НО:
Преди да попитам тук, се допитах до няколко И. интелекта.
Този вариант, както и някои други препоръки ги изпробвах, но не работят!
Възможно е аз да не правя нещо като хората.

Обобщено: Или дефинициите не се виждат от асемблера,
или се виждат, но заедно с тях и много други неразпознаваеми неща за асемблера.

Както и да е.
Ще напиша нови в асемблерния файл. Не е болка за умиране.
Все пак, ако на някой му хрумне нещо може да сподели...

Автор:  miro_atc [ Нед Мар 22, 2026 1:23 pm ]
Заглавие:  Re: Използване на готови дефиниции в асемблерен файл?

CubeIDE е някаква среда, въпросът е кой е компилаторът?
Ако се ползва GCC то това е набор от инструменти - препроцесорът (GNU CPP) е един инструмент, С компилаторът е друг, Ц++ компилаторът е друг, асемблер, линкер и т.н.
Всеки инструмент може да се ползва поотделно. Примерно може да правиш препроцесинг на текстови файлове или на Паскал/АДА и т.н.
Може да викаш инструментите ръчно, ако искаш. Но обикновено се ползва make и makefile в който има правила кога какво да се вика. Аз сам си правя мейкфайловите и сам си решавам кое как. Някои среди генерират мейкфайлове... Конкретно кюба - нямам идея, ще трябва сам да го разбереш.
Ако директно се вика гну-ас-а за асемблерските файлове естествено няма да има препроцесинг. Някой трябва да извика препроцесорът...
Може да се извика директно, но обикновено се ползва gcc. Това е така да се каже универсален инструмент. Викаш gcc и то от своя страна вика конкретния компилатор, препроцесор или асемблер. Може да се ориентира по типа на файла. От тук идва и разликата между s и S файловете. За едните ще пусне препроцесинг, за другите не. Но това важи само и единствено ако се вика gcc. Ако си викаш директно препроцесорите и компилаторите и асемблерите, то разширенията на файловете нямат абсолютно никакво значение.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/