Stm32f4 gnu mint szabható fordítási környezetet (4. rész)

A korábbi publikációk Megmutattam, ahonnan elrugaszkodni írásakor programok STM32F4, állítsa be a fordítási környezetet, mi határozza meg az elrendezés fájlt, így a minta fájlt a program assembly nyelven, próbálja meg beállítani a mikrokontroller GPIO és LED pislogott.

Most itt az ideje, hogy kitaláljuk összeállítása programok, amelyek több fájlt, hogy a módját, hogy írjon programok számos hibakereső táblák, megtanulják, hogy az alkalmazás beállításait könnyen módosíthatók

Kezdjük a legegyszerűbb: a mechanizmus feltételes fordítási

  1. kötött 15 GPIO_D az STM32F4 Discovery
  2. kötött 2 GPIO_H számára Open407I-C

A szerelő GNU AS egy olyan mechanizmus, a feltételes fordításra.
A csapat talált .def - szerint a dokumentáció létrehozásához szükséges értéket, de nem tudta, hogy működjön, ezért használtam az irányelv „.A”.
Kezdetben szánunk változó fordító (nem a program!) Néhány érték, én választottam a változó nevét fejlesztői kártyáin:

E paraméterek a feltételes fordítást a következő:

Az összes „közvetlen” hivatkozások GPIOD (GPIOH) most változott GPIO_LED A szöveg a program. érték RCC_AHB1ENR cserélje RCC_GPIO_EN tovább és így tovább.
Kapjuk a következő programot:

Most gondoljon a viszonylag nagy mérete a programokat, hogy nem valószínű, hogy kényelmes, hogy írjon egy fájlban, és hogy áll több (talán még néhány tucat) fájlokat.
Megnézzük egy példa a mi program „exhibicionista”: van egy rutin, amely megvalósítja közötti szünet bekapcsolása / LED ki, most ez csak egy ciklusban egy meghatározott számú konjunkturális várakozások, de a jövőben, egy rutin átírható a rendszer használatához időzítő - és a szubrutin helyes helyezze egy másik fájlt.
Include fájlok lehetnek irányelv „.include” szerelő:

Ez a megoldás nagyon egyszerű és nagyon hatásos, de ez már egy, a látszólag jelentéktelen hiba - egy közös terület a tag nevét.
Bár a program nem lesz vége 150-300 útmutató - akkor nem lesz probléma a „feltalálás” címke nevek, mint például a következő rutin késések kezdődhet a label „DELYA1:” és a következő még valamilyen kombinációja, de ez nem így van csak amint kezdeni a saját könyvtárát rutinokat, és kezdjük el használni őket különböző kombinációkban - biztos, hogy indul átkelés nevű tag.
Egy megoldás - egy bevezetés a neve a címke nevét a forráskód fájl előtag, például a késés szubrutin, akkor adja meg a következő cimkét „DELAY_ASM_DELAY:” kipróbáltam egyszer így, bár nem fenntartások nélkül - sőt, a folyamat kialakulásának egyes modulok elhelyezhetők az alkönyvtárakban a projekt, és nem volt kereszteződés névcímkékről tartalmaznia kell nem csak a fájl nevét, de a könyvtár nevét „DIRECTORY_DELAY_ASM_DELAY:” (például a könyvtár neve „könyvtár”, a végén, ha van még a címke nevét amely 2- 3 szó az egyértelműség kedvéért - megkapjuk teljesen monstroidalnye címkeneveket: „DIRECTORY_DELAY_ASM_DELAY_LOOP_0x10000:” ...

Egy másik módja az, hogy külön összeállítás forráskódú program fájlokat.
Tény, hogy a szerelő lehet összeállítani külön main.asm delay.asm fájlt. és ezután a linket - össze e két rész kombináljuk a végső firmware.
Mivel minden .asm fájlt külön kell fordítani - elején fájlnak tartalmaznia kell megadásával összeállítása beállításokat, és ha szükséges, tartalmazza a állandók fájlt.
Annak érdekében, hogy mondja a fordító milyen címkét ezt a fájlt lehet használni kívülről - az irányelvben alkalmazott „.global”.
Tekintsük rutinok szöveg helyezve egy külön fájlban külön összeállítás:

Ennek megfelelően, a címkén DELAY bejelentett .global lesz elérhető, hogy hívják más fájlokat forráskódú szoftver, de a címke hozzáférhető csak belül DELAY_loop delay.asm fájlt, és valójában a nevét egy címke nélkül hatást használják más részein a program - a kereszteződés nem lesz!

a szövegben a fő program szerint a de facto meglévő szabályokat kell tartalmaznia az irányelv „.extern” amely egy címkét, amely meghatározott másik fájlt, és kapcsolódik a színpad elrendezése, de a dokumentációt GNU AS megállapította, hogy az irányelv vezetjük a kompatibilitás biztosítása érdekében, valamint bármilyen nem található a forrás fájl összeállítása címkék és állandók tartják a globális. Megközelítés véleményem vitatható, mégis külső címkével érték és állandó jelzik egyértelműen jobb.

mint látható a fenti felsorolásban - nincs szükség további „.include” nem kell tenni a mellékelt fájlt! kapcsoló feldolgozza a linker.

A projekt összeállítása és összeszerelési folyamatot kell az alábbiak szerint:

Most nyilvánvaló hátránya egy ilyen rendszer egy adott programozó: szükség van, hogy végezzen egy összeállítás külön fájlokban, és akkor is az összeállítás, hogy meghatározza a kapott összeállított fájlokat. Ezt manuálisan folyamatosan szerkeszti make_project.bat fájl rutinszerű tevékenység, ezért ezt a folyamatot tovább kell adni, hogy valaki más „erős vállak”
Kis kísérlet „szombaton”, írtam egy új .bat fájlt, gyűjtő projekt automatikusan.
Volt, hogy néhány változtatást a szerkezet a projekt könyvtárat a „megállapodás” a fájlok elnevezéséhez:

  1. a forráskód található a könyvtárban src / projekt:
    Stm32f4 gnu mint szabható fordítási környezetet (4. rész)
  2. alkönyvtár fordítási / feltöltött fájlok készen villogó, alkönyvtárban fordítási / temp / feltöltött fájlok segítségével összeállított fájlok esetén értékek stb
    Stm32f4 gnu mint szabható fordítási környezetet (4. rész)
  3. összeállítja az összes fájl egy könyvtárban / src és kiterjesztésű .asm. Ebben az esetben a fájlokat, hogy szerepelni fog .include az irányelv nem rendelkezik az kiterjesztés .asm - mint ebben az esetben akkor kell összeállítani kétszer - először a programban, amelyben többek között az irányelv .include. és külön bővíteni.
  4. A pálya minden fájlt, amelyek szerepelnek a projekt .include csapat kell kezdeni mutatva az src /. például az állandók fájl, amely az src / irányelv írandó a következő .include «src / const_file.inc»

Összeállítás a következőket script helyezzük

Folder A projekt kell helyezni a mappát, amelyben a maga módján, hogy nincs szóköz a neveket. Orosz betűk a könyvtár nevét megengedett.
Így fut útvonal: D: / MoyProekt / gnuas / első / - elfogadható, de a D: / My Project / gnúk / első / - nem teszi lehetővé (a mappa neve "My Project" egy szóköz)

Szerint a firmware részén .text hogy magyarázatot:

Ez a rekord jelzi a kapcsoló, hogy a szakasz kell helyezni a sorrendben, amelyben ismertetjük.
Ha meg akarja szakítani vektor bemutattam részén .vectors, ez a rész kell felelnie a program csak egyszer (ami logikus, hiszen a vektortáblára a programok eddig csak egy).
Továbbá kijelentem, részben a program, ahol a szöveg kerül: a .text és .asmcode - a „gondolat” .text szakasz garantált rendelkezésre, miután a vektor asztal - ebben a részben helyezzen különböző szolgáltatási rutinok (például „sapka” interrupt) és de .asmcode részén írom a program szövegét.
Így a mondás a programrész .vectors Garantálom elhelyezése elején a program, függetlenül attól, hogy a számla meg van határozva, ha összeköti main.o
Az, hogy a forgalomba több szakaszból .asmcode. egymáshoz képest többnyire nem számít (jó, hogy egészen őszinte legyek -, hogy biztosan játszik, de ez csak nagyon nagy programok, de ez még mindig túl korai gondolni)
.rodata szakasz - egy része az állandók flash, elkülönített külön kedvéért, akkor könnyebb elmagyarázni, mire van szükség ebben a példában:

és az állandó helyezzük külön fejezetben után szakaszok .rodata .asmcode
Csekélység. - Igen! De néha ez nagyon kényelmes!

Remélem az alapvető ötlet, hogy át nekem, amikor alkotó szakaszok világossá vált, és most meg kell változtatni, hogy a projekt „exhibicionista”, a két fájl a forrás programok elnevezése szakaszok

Most, bármilyen módon nem adtunk a fájlokat az elrendezés - .vectors részén mindig az elején a forrás fájlt, és .asmcode szakasz után ... De ami a program része megy azonnal az asztalra megszakítás mutatók (main.asm vagy delay.asm ) - függ a sorrendben azok elrendezése (aki felállt -, hogy és cipők előtt és küldte)

Mi kell még a teljes boldogság? programok írása assembly nyelven STM32F4?

Ui Majdnem elfelejtettem, hogy csatolja a fájlt blink4.zip