Variabelen groter dan 256 bytes
In tal van toepassingen is het nodig om variabelen van meer dan 256 bytes te kunnen gebruiken. Dit is bijvoorbeeld het geval wanneer je een robot met camera wil bouwen en die beelden wil kunnen bewerken of wanneer je coole effecten wil toevoegen aan een audiostream. Hoewel de PIC18F4550 van het Dwengo-bord 2048 bytes data-geheugen bevat, kan je standaard geen variabelen gebruiken die groter zijn dan 256 bytes. Hiervoor is een kleine aanpassing in het linker-script nodig.
Het aanmaken van grote variabelen gaat in 4 stappen:
Stap 1. Wijs een eigen sectie, DATA, toe aan een object dat groter is dan 256 bytes. In onderstaand voorbeeld maken we een array large_table van 768 integers (1536 bytes).
#pragma udata DATA // section DATA int large_table[768];
Stap 2. Je kan toegang krijgen tot het object large_table via een pointer table_ptr. Hier wijst table_ptr naar het eerste element in de array. Je kan de array lezen of aanpassen met table_ptr[ADDRESS].
#pragma udata // return to default section int *table_ptr = &large_table[0];
Stap 3. In het linkerscript wordt de volledige geheugenruimte van de PIC opgedeeld in verschillende blokken (DATABANK) die dan kunnen toegekend worden aan specifieke secties (SECTION). Pas het linker-script (lkr-bestand) aan zodat er een voldoende groot geheugenblok wordt toegekend. Dit gebeurt met het woord DATABANK waar je een NAME, START en END aan moet meegeven. In ons voorbeeld NAME=data van adres 0x200h tot en met 0x7FFh.
Merk op dat in ons voorbeeld de geheugenruimte die we wensen zo groot is dat we de buffer die oorspronkelijk gebruikt werd voor USB moeten verwijderen. De USB-functionaliteit kan je dan wel niet meer gebruiken. Verwijder dus de DATABANK-lijnen in het linkerscript voor USB (adres 0x400h tot en met 0x7FFh).
Stap 4. Tot slot wordt de aangemaakte geheugenruimte data (kleine letters) toegekend aan de DATA-sectie (hoofdletters zoals in stap 1).
Hieronder de code voor het linker-script (lkr-bestand).
// File: 18f4550_bigMem.lkr // Linker scrip for PIC18F4550 and storing a large array of 1536 bytes LIBPATH . FILES c018i.o FILES clib.lib FILES p18f4550.lib CODEPAGE NAME=page START=0x0 END=0x7FFF CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED CODEPAGE NAME=eedata START=0xF00000 END=0xF000FF PROTECTED ACCESSBANK NAME=accessram START=0x0 END=0x5F DATABANK NAME=gpr0 START=0x60 END=0xFF DATABANK NAME=gpr1 START=0x100 END=0x1FF DATABANK NAME=data START=0x200 END=0x7FF PROTECTED ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED SECTION NAME=CONFIG ROM=config SECTION NAME=DATA RAM=data STACK SIZE=0x100 RAM=gpr1
- Type:
- login of registreer om te reageren
-


Uw winkelwagen