Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[PIC24F] [ASM] Umieszczanie tablicy danych pod określonym adresem programu.

Tomek-85 20 Sty 2012 23:08 1488 5
  • #1 20 Sty 2012 23:08
    Tomek-85
    Poziom 14  

    Witam serdecznie użytkowników asemblera i mikrokontrolerów PIC.

    Pytanie nr 1:
    Jak powszechnie wiadomo każdy kod programu rozpoczyna się od adresu 0x200.
    Zmodyfikowałem plik .gld na moje potrzeby i mój kod programu rozpoczyna się
    od adresu 0x400.

    Code:

    /*
    ** Linker script for PIC24FJ64GA004
    */

    OUTPUT_ARCH("24FJ64GA004")
    CRT0_STARTUP(crt0_standard.o)
    CRT1_STARTUP(crt1_standard.o)

    OPTIONAL(-lpPIC24Fxxx)

    /*
    ** Memory Regions
    */
    MEMORY
    {
      data  (a!xr)   : ORIGIN = 0x800,         LENGTH = 0x2000
      reset          : ORIGIN = 0x0,           LENGTH = 0x4
      ivt            : ORIGIN = 0x4,           LENGTH = 0xFC
      aivt           : ORIGIN = 0x104,         LENGTH = 0xFC
      program (xr)   : ORIGIN = 0x400,         LENGTH = 0x1400
      CONFIG2        : ORIGIN = 0xABFC,        LENGTH = 0x2
      CONFIG1        : ORIGIN = 0xABFE,        LENGTH = 0x2
    }

    __CONFIG2 = 0xABFC;
    __CONFIG1 = 0xABFE;

    __NO_HANDLES = 1;          /* Suppress handles on this device  */

    __IVT_BASE  = 0x4;
    __AIVT_BASE = 0x104;
    __DATA_BASE = 0x800;
    __DATA_LENGTH = 0x2000;
    __CODE_BASE = 0x400;
    __CODE_LENGTH = 0x1400;


    Mam dwie tablice danych w postaci następującej:

    Kod: asm
    Zaloguj się, aby zobaczyć kod


    W jaki sposób umieścić te dwie tablice danych aby zajęły mi niewykorzystany obszar danych
    od adresu 0x200 do adresu 0x400 ?
    Przeczytałem rozdział 6.8 Directives that modify section alignment z dokumentu
    MPLAB Assembler, Linker and utilities for PIC24 mcu's and dsPIC DSCs.
    Próbowałem swoich sił lecz niestety nie uzyskałem pożądanego rezultatu.



    Pytanie nr 2:
    Czy istnieje możliwość zmiany bitów konfiguracyjnych procesora używając jedynie grupy
    rozkazów typu:

    Kod: asm
    Zaloguj się, aby zobaczyć kod

    ???


    Za wszelką próbę pomocy bardzo dziękuję!

    0 5
  • #2 21 Sty 2012 03:04
    63404
    Użytkownik usunął konto  
  • #3 21 Sty 2012 08:07
    adamwesola
    Poziom 24  

    Jak powszechnie wiadomo, w 8-mio bitowych picach, dyrektywa ORG lokuje program/dane tam gdzie chcesz.
    A jak jest z tym u Ciebie ?

    0
  • #4 21 Sty 2012 15:04
    Tomek-85
    Poziom 14  

    Projekt mam napisany w języku "C". W asemblerze mam kilka funkcji, które nie są mojego autorstwa. Funkcje asemblerowe mam
    zapisane w pliku z rozszerzeniem .s ,który jest dołączony do projektu. Tablice w asemblerze STable i SiTable mógłbym skopiować do dowolnego
    pliku z rozszerzeniem .c i użyć dyrektywy __attribute__((space(prog), address(0x200))) lecz nie mam pojęcia jak zrobić, by te tablice
    były "widziane" przez kod asemblerowy. Czy zwykłe dopisanie słowa extern miałoby sens?

    adamwesola -> teoretycznie powinno działać .palign algn[, fill[, max-skip]] (strona 77 ww. dokumentu) lecz nie wiem
    jak to zastosować. Asemblera niestety nie znam.

    0
  • #5 22 Sty 2012 01:18
    gaskoin
    Poziom 38  

    extern powinno być ok

    0
  • #6 25 Sty 2012 09:10
    Tomek-85
    Poziom 14  

    Wystarczyło dopisać .section *,address(0x200), psv
    za linią .text i kompilator umieścił dane w wyznaczonym miejscu.
    Problem rozwiązany, temat zamykam. :)

    0