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.

[PIC][C] Tablica pod konkretnym adresem w pamięci programu?

dondu 04 Mar 2011 15:49 1840 6
  • #1 04 Mar 2011 15:49
    dondu
    Moderator Mikrokontrolery Projektowanie

    W projektowanym układzie chcę zrobić jako dodatek rejestrator historii pracy układu z możliwością jego odczytu programatorem, przy jednoczesnej blokadzie możliwości odczytu programu.

    Dane będą zapisywane w pamięci programu (FLASH) więc uprzedzając pytania, a dlaczego nie EEPROM:
    - EEPROM jest za mały,
    - EEPROM będzie wykorzystany do innych celów i będzie chroniony przed odczytem,
    - na płytce tylko ten procesor i nie może być nic więcej,
    - ograniczenie ilości zapisów do flasha znacząco przekracza moje potrzeby.


    Układ, który akurat mam "na tapecie" to PIC18F67K90 (128kB Flash, 4kB EEPROM), i ma możliwość zabezpieczania pamięci programu z podziałem na osobne bloki, co akurat jest mi bardzo na rękę.

    [PIC][C] Tablica pod konkretnym adresem w pamięci programu?

    Chcę użyć cały ostatni blok pamięci programu zaznaczony na czerwono począwszy od adresu 0x1C000. Ten blok nie będzie zabezpieczony, by spokojnie można go odczytać programatorem.

    Używam MPLAB IDE 8.63 with HI-TECH PIC18 PRO 9.65.

    W manualu znalazłem opis funkcji do zapisu danych do flasha flash_wite()
    i zlokalizowałem ją w pliku: ...\HI-TECH Software\PICC-18\PRO\9.65\sources\flashwrite.c

    Funkcja flash_write() na wejściu używa pointer-ów:

    Code:
    flash_write(const unsigned char * source_addr, unsigned int length, far unsigned char * dest_addr)


    Normalnie tablice w pamięci programu deklaruję poprzez CONST, ale to kompilator decyduje gdzie jest umieszczana:

    Code:
    const unsigned char sinus[200] = {128,132,136,139, .....};


    W moim przypadku potrzebuję:
    - zadeklarować ją dokładnie pod adresem 0x1C000.
    - używać pointerów do wskazania jej położenia.

    Jak to zrobić?

    0 6
  • Pomocny post
    #2 04 Mar 2011 15:53
    atom1477
    Poziom 43  

    Zadeklaruj nową sekcję i w niej umieść tablicę.

    0
  • #3 04 Mar 2011 16:11
    dondu
    Moderator Mikrokontrolery Projektowanie

    Czyli chodzi o PSECT?
    Hmm, niestety nigdy tego nie używałem. Mógłbym liczyć na jakąś podpowiedź?

    0
  • #4 04 Mar 2011 17:04
    atom1477
    Poziom 43  

    dondu napisał:
    Czyli chodzi o PSECT?

    Chm. Nie?

    dondu napisał:
    Hmm, niestety nigdy tego nie używałem. Mógłbym liczyć na jakąś podpowiedź?

    W przypadku PSECT nie bardzo.
    W przypadku sekcji jak najbardziej.

    0
  • #5 04 Mar 2011 17:06
    dondu
    Moderator Mikrokontrolery Projektowanie

    Jak mam zadeklarować nową sekcję?

    0
  • #7 08 Mar 2011 17:24
    dondu
    Moderator Mikrokontrolery Projektowanie

    Niestety w HI-TECH C nie ma SECTIONS zadeklarowałem więc PSECT:

    Kod: asm
    Zaloguj się, aby zobaczyć kod

    0