| Микроконтролери и електроника 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/ |
|