logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[avrgcc] Jak wkompilować zewnętrzne pliki jako tablice w czasie kompilacji?

lekto 26 Cze 2015 17:02 648 7
  • #1 14805145
    lekto
    Poziom 35  
    Witam, szukam sposobu żeby w czasie kompilacji zewnętrze pliki było wkompilowane jako tablice. Chodzi o to że w projekcie tworzę stronę składającą się z kilku plików i muszę je trzymać jako tablice, co jest niewygodne. Wolałbym żeby były to zwykłe pliki i w kodzie odwoływać się do nich jak do tablic. Pierwsze co mi przychodzi do głowy to napisać program który przerabiałby pliki na nagłówek, który były dodany do projektu, ale zamiast kombinować może istnieje gotowe rozwiązanie. Mój kompilator to avrgcc.
  • #2 14805169
    grko
    Poziom 33  
    W zasadzie twoj pomysl jest ok. Ja zrobilbym to tak:
    plik z danymi: data.txt
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    plik z tablica: tab.c
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Nie zapomnij o PROGMEM oraz odpowiednim odwolywaniu sie do elementow tablicy.
  • #3 14805184
    lekto
    Poziom 35  
    U mnie niestety pliki są w formacie html i takie coś nie działa choćby z powodu pojawiania się cudzysłowu, który trzeba byłoby poprzedzić ukośnikiem.
  • #4 14805239
    mi14chal
    Poziom 28  
    Pobierz hexplorer załaduj do niego plik html potem ctrl+a potem prawy przycisk myszy na zaznaczenie copy as C data i masz wtedy tablicę.
  • #5 14805259
    lekto
    Poziom 35  
    Niestety ten program jest po Windowsa, a korzystam z Linuxa, zresztą musiałbym po każdej zmianie ręcznie robić tablicę.
  • #6 14805338
    slx
    Poziom 19  
    Mamy przykładowo plik test.htm.
    Użycie polecenia
    Kod: Bash
    Zaloguj się, aby zobaczyć kod

    utworzy nam plik obiektowy (test.o) w którym mamy symbole:
    _binary_test_bin_start
    _binary_test_bin_end
    _binary_test_bin_size
    (czyli po kolei: adres początku, adres końca i rozmiar danych)
    dodajemy deklarację
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    i już możemy korzystać z naszych danych.

    A tutaj przykładowe kawałki makefile http://www.atmel.com/webdoc/AVRLibcReferenceManual/FAQ_1faq_binarydata.html
  • #7 14805405
    mi14chal
    Poziom 28  
    lekto napisał:
    Niestety ten program jest po Windowsa, a korzystam z Linuxa

    To użyj wine
  • #8 14805442
    lekto
    Poziom 35  
    Chyba udało się, ale coś jest nie tak, używam funkcji w której występuje makro PSTR, zamieniam PSTR na _binary_strona_index_html_start i dostaję losowy ciąg znaków z pamięci.

    plen=make_tcp_data_pos(buf, plen, PSTR("test")); // to działa
    plen=make_tcp_data_pos(buf, plen, _binary_strona_index_html_start); // to już nie
REKLAMA