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

ARM C: Jak wywołać funkcję z RAM, gdy main jest we flashu? Kompilacja i bin dla RAM

Smashing 17 Sty 2009 11:29 2371 7
REKLAMA
  • #1 6011210
    Smashing
    Poziom 20  
    Posty: 513
    Pomógł: 18
    Ocena: 12
    Da się napisać funkcje w C na procesor ARM, które by działały by ramie. Działało by to tak ze jest program główny Main, który napisany jest wcześniej i jest we flashu. W tym programie Main jest skok lepiej funkcja która działa mi w ramie.
    1. Jak na początku skompilować program Main, który jest we flashu?, np. zrobić skok w adres gdzie miała by być ta funkcja a jak jej nie ma do jest powrót do main?
    2. jak dopisywać i skompilować samą funkcje, bez Main tzn. jak napisać samą funkcje żeby z kodu C zrobić bina który bym potem mógł umieścić w ramie

    Może być jakiś opis po angielsku
  • REKLAMA
  • REKLAMA
  • #3 6015505
    Smashing
    Poziom 20  
    Posty: 513
    Pomógł: 18
    Ocena: 12
    Wiem jak napisać funkcje i umieścić ją w ramie albo we flashu, to akurat nie jest trudne. Jeśli umieszczę w moim projekcie kilka funkcji i kilka jest we flashu, i np jedna w ramie to jeśli tą w ramie zmienienie to wystarczy tylko skompilować program ( cały program ) i przeładować sam ram, to jest zrozumiałe.
    Ale czy da się zrobić tak żeby nie kompilować całego programu, bo po prostu nie będzie źródła lub nie wiem zrobić ze źródła .dll i skompilować samą funkcje. Mam taki pomysł :
    1. mam 64 kilo ramu, ustawiam w skrypcie linkera że ramu jest 50 kilo a 14 kilo mam na moją funkcję. U mnie to będzie 0x00200000 +50 kilo- tu będzie moja funkcja i zmienne dla niej.
    2. kompiluje cały program z moją funkcją w ramie i wysyłam .bin'a do procesora.
    3. otwieram nowy projekt i piszę moją funkcję w ramie ( linker zna tylko 14 kilo pamięci ) i z jakąś funkcją main. kompiluję i wysyłam tylko ram o wartości 0x00200000 +50 kilo.

    Proszę o słowa krytyki i czy to ma sens, chyba ze jest inny sposób prostszy.
  • REKLAMA
  • #4 6015741
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    IMHO nie ma to zadnego sensu, bo po zaniku zasilania twoje funkcje wyslane tylko do RAMu (bez kopii w ROMie, kopiowanej podczas inicjalizacji sekcji .data) znikaja tak samo.

    pozatym - jaka jest zaleta tego kombinowania?

    4\/3!!
  • REKLAMA
  • #5 6016094
    Smashing
    Poziom 20  
    Posty: 513
    Pomógł: 18
    Ocena: 12
    Funkcja w ramie będzie dość często modyfikowana, po zaniku zasilania będzie kopiowanie funkcji z karty SD. To naprawę nie jest problem (chyba że jest ). Pytam się o praktyczne problemy z tym związane albo jak można to zrobić. Nie potrzebuje przykładów w C. Cały system działa na Rtos, i jest w Flashu. Na razie ta cześć mi działa z moja funkcją we Flashu. Teraz robię próby i daję funkcje do ram'u. A potem chodzi o to żeby kompilować sama funkcję i wgrywać ją do ramu. Potem ten kawałek ramu z tą funkcją zapisze na sd... Jak byś się pytał co robie... to PLC
  • #6 6020833
    Konto nie istnieje
    Konto nie istnieje  
  • #7 6021082
    Smashing
    Poziom 20  
    Posty: 513
    Pomógł: 18
    Ocena: 12
    Dokładnie o to mi chodzi. Jeśli potem otworze nowy projekt i napiszę to moją funkcje w ramie i skompiluję to z jakąś funkcją main ( funkcje main ustawie we Flashu ale go nie przeładuje ), i przeładuje ram. Bo nie da się skompilować samej funkcji bez main i zrobić z tego .bina chyba że się da to nie wiem jak to zrobić
  • #8 6026307
    Konto nie istnieje
    Konto nie istnieje  

Podsumowanie tematu

✨ Dyskusja dotyczy sposobu wywołania i kompilacji funkcji działającej w RAM na procesorze ARM, podczas gdy główny program (main) znajduje się we flashu. Poruszono kwestie techniczne dotyczące podziału pamięci w skrypcie linkera, gdzie część RAM jest zarezerwowana na funkcję, a reszta na inne dane. Proponowany sposób to kompilacja całego programu z funkcją w RAM, a następnie możliwość kompilacji i wgrywania samej funkcji do RAM bez konieczności przebudowy całego programu. Wskazano, że GCC i binutils umożliwiają kompilację samych funkcji z odpowiednim ustawieniem linkera, co pozwala na tworzenie binariów do wgrania do RAM. Podkreślono, że funkcje w RAM znikają po zaniku zasilania, więc konieczne jest ich kopiowanie np. z karty SD podczas startu systemu. System działa na RTOS, a główny program jest we flashu. Propozycja obejmuje sprawdzanie obecności funkcji w RAM przez zmienną statusową i wywoływanie jej, jeśli jest dostępna.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA