eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › C++ ośla łączka
Ilość wypowiedzi w tym wątku: 91

  • 61. Data: 2023-02-17 20:42:48
    Temat: Re: C++ ośla łączka
    Od: "J.F" <j...@p...onet.pl>

    On Fri, 17 Feb 2023 20:30:22 +0100, Piotr Gałka wrote:
    > W dniu 2023-02-16 o 19:22, Marek pisze:
    >> On Thu, 16 Feb 2023 13:20:42 +0100, Piotr
    >> Gałka<p...@c...pl> wrote:
    >> Ciekawe. Nie wiem jak w arm ale w mips setki tysięcy razy programowałem
    >> flash z kodu będącym w innej stronie niż strona programująca i nigdy nie
    >> miałem z tym problemu.
    >>
    >
    > Z tego co brat mówi, to dotychczas w AtXmega (dawniej w Atmega)
    > dokładnie tak robił - programuje flash z kodu w innej stronie flasha.
    >
    > Ale to na pewno nie jest tylko nasz wymysł. Brat znalazł wczoraj w necie
    > że jakiś gość w maju 2022 szukał dokładnie tego samego. Jacyś ludzie mu
    > coś tam podpowiadali, ale nie wynikało, czy już mu zadziałało, czy nie.
    > Wynikało za to, że jeszcze nie znalazł tej 1-ki bo podał gdzieś tam
    > nieparzysty adres tej funkcji, którą chce przenieść do RAM a w pliki map
    > był adres parzysty.

    1-ka moze zaskoczyc :-)


    tu masz pomysl z druga funkcją - ale uprzedzam, ze kompilator z
    linkerem moga je inaczej rozmieszczac
    https://stackoverflow.com/questions/72089507/apm32-c
    -copy-execute-function-in-ram

    Gdzies w raporcie linkera powinna byc dlugosc kodu funkcji.
    Ale to troche niewygodne tak sprawdzac za kazdą kompilacją.
    No moze nie za kazdą - po grubszej zmianie.

    J.


  • 62. Data: 2023-02-17 20:44:12
    Temat: Re: C++ ośla łączka
    Od: Piotr Gałka <p...@c...pl>

    W dniu 2023-02-16 o 19:27, Marek pisze:
    > On Thu, 16 Feb 2023 13:54:54 +0100, heby <h...@p...onet.pl> wrote:
    >> Było to omawiane w tym wątku. Ogólnie, jesli ma to związek z
    >> programowaniem flasha, to boje się zapytać, czy jakoś się
    >> zabezpieczacie prze utratą zasilania w trakcie.
    >
    > A co to za problem? Jak się przerwie programowanie z jakiekolwiek powodu
    > to bootloader zaprogramuje ponownie po resecie.

    Moim zdaniem zbyt optymistycznie do tego podchodzisz.
    Jak flash będzie nie do końca zaprogramowany (bo zniknęło napięcie w
    trakcie programowania) to może w większości przypadków dobrze się
    odczytywać ale czasem źle. Taki błąd może być bardzo trudny do znalezienia.
    Kiedyś w naszym emulatorze EPROMów mieliśmy taki błąd, że średnio
    statystycznie raz na 3 miliony odczytów jakiś jeden bit potrafił mu się
    przekłamać. Statystykę zebraliśmy programem czytającym w koło znaną
    zawartość. Miałem wtedy tylko jednokanałowy, analogowy oscyloskop, który
    sobie sam zrobiłem (pasmo 5MHz) - żadnej szansy wyłapania tego momentu.
    To wszystko było jeszcze THT - się okazało, że jakiś kondensator trzeba
    było bliżej nóg zasilających przenieść i problem zniknął.
    P.G.


  • 63. Data: 2023-02-17 21:08:01
    Temat: Re: C++ ośla łączka
    Od: Piotr Gałka <p...@c...pl>

    W dniu 2023-02-17 o 02:28, JDX pisze:

    > Sugeruję jednak zapoznanie się ze skryptami linkera - zakładam, że
    > używacie GNU toolchaina.

    Nie mam pojęcia czego używamy. To nie na temat - wiem, że teraz brat
    przełącza się często między dwoma komputerami. Na jednym Win7 i jakaś
    stara wersja środowiska (kojarzy mi się, ze mówił, że czwarta) w której
    jest ileś rzeczy, które mu są potrzebne i drugi Win10 na którym nowa
    wersja (piata?) środowiska (bo wymaga WIN10) w której jest z kolei coś
    innego co jest mu potrzebne, ale brakuje tego czegoś, co było w starym.
    Nie umiem dokładniej bo jak mi miesiąc czy dwa temu o tym mówił to nie
    starałem się zapamiętać o co biega.

    > W sieci jest mnóstwo przykładów jak odczytać
    > adres początku danej sekcji, jej końca, jej długość i jak wyeksportować
    > te dane do linkowanego programu.
    >
    > Hint: Można sobie zdefiniować sekcję i umieścić w niej tylko jedną funkcję.

    Brat mówił, że większość rozwiązań opiera się na wymuszaniu na linkerze
    jakichś działań, ale nie chce się w to bawić. Na dziś przyjął, że
    napisze tę funkcję (chyba 10 bajtów) w assemblerze i wtedy będzie
    dokładnie znał jej rozmiar.
    Widział też jakieś rozwiązania polegające na tym, że kawałek kodu ląduje
    na stałe w RAMie. Tylko jakoś tak (nie wiem czy uzasadnienie) bardziej
    wierzę, że po 10 latach procedura we flashu nadal jest jaka była, a czy
    jakieś zakłócenie nie naruszy w tym czasie RAMu...

    > To podstawy:
    > https://developer.arm.com/documentation/ka002971/lat
    est
    > https://stackoverflow.com/questions/37004954/functio
    n-address-in-arm-assembly-have-one-byte-offset
    >
    > Przy czym należy dodać, że Corteksy M (M-profile) wspierają tylko zestaw
    > instrukcji Thumb/Thumb-2, a ten nieszczęsny bit został tam zapewne
    > dlatego, że ,,duże ARM-y" (A-profile i R-profile) oprócz zestawu Thumb
    > wspierają też zestaw instrukcji ARM.
    >

    To nasze (a właściwie mojego brata) pierwsze podejście do więcej niż
    8-bitowych procesorów (ja nigdy nic na mikrokontrolery nie pisałem).
    Właściwie to drugie podejście bo w grudniu już jedno urządzenie na
    EFM32HG309F64G-C-QFN24 wypuściliśmy.
    Na razie zostało nam kilkanaście (tymczasowo) zablokowanych urządzeń bo
    nie umiemy jeszcze komunikować się z nimi po interfejsie Debug.
    Skorzystaliśmy z ich defaultowego Bootloadera udającego RS232 na USB
    przez który ładowaliśmy nasz bootloader (niszcząc ich) i pod nim
    ładowaliśmy pierwszy program jako upgrade.
    P.G.


  • 64. Data: 2023-02-17 21:21:23
    Temat: Re: C++ ośla łączka
    Od: Piotr Gałka <p...@c...pl>

    W dniu 2023-02-17 o 20:23, heby pisze:
    > On 17/02/2023 20:20, Piotr Gałka wrote:
    >> Jak się chce modyfikować flash to kawałek funkcji ma być wykonywany z
    >> RAMu.
    >
    > Możesz wskazać dokładnie ten pdf?
    >

    Brat już wyszedł z pracy, a do poniedziałku zapomnę pytania.
    Jeśli on teraz jest (99%) w PG22 to może to być tylko ten pdf:

    https://www.silabs.com/documents/public/data-sheets/
    efm32pg22-datasheet.pdf

    lub (bardziej prawdopodobne) ten:

    https://www.silabs.com/documents/public/reference-ma
    nuals/efm32pg22-rm.pdf

    Nie chce mi się szukać gdzie to jest bo ja tego drugiego nawet nie
    przeglądałem. Brat mnie zawołał, podświetlił akapit na ekranie i chciał
    usłyszeć jak ja to rozumiem.
    P.G.


  • 65. Data: 2023-02-17 21:35:26
    Temat: Re: C++ ośla łączka
    Od: Piotr Gałka <p...@c...pl>

    W dniu 2023-02-17 o 20:42, J.F pisze:
    > tu masz pomysl z druga funkcją - ale uprzedzam, ze kompilator z
    > linkerem moga je inaczej rozmieszczac
    > https://stackoverflow.com/questions/72089507/apm32-c
    -copy-execute-function-in-ram

    Przesłałem mu ten link - zajrzy sobie w poniedziałek.
    W tym poprzednim, który podałeś (jeśli czegoś nie pomieszałem) to brat
    powiedział, że to właściwie o 51-ce, ale spodobała mu się tam metoda
    uzyskania z kompilatora funkcji w assemblerze. Nie wiem czym to się
    różni od tego co on normalnie stosuje, bo wiem, że zagląda jak coś się
    kompiluje, ale widocznie czymś się różni.

    W każdym razie na razie zdecydował, że wpisuje te parę bajtów w assemblerze.

    Ja mam na głowie kilka szybkich projektów płytek. Na razie lista do
    zrobienia 'na wczoraj' narasta szybciej niż się wygrzebuję z poprzednich.

    Strasznie głupio projektować już kolejne płytki na nieznanym sobie
    procesorze, gdy poprzednich nie mieliśmy jeszcze jak sprawdzić.
    P.G.


  • 66. Data: 2023-02-17 22:09:14
    Temat: Re: C++ ośla łączka
    Od: "Grzegorz Niemirowski" <g...@g...net>

    heby <h...@p...onet.pl> napisał(a):
    > Więc co oznacza?

    Może być różnie, ale np. konieczność zaczynania procedury od początku. To
    taki komunikat: daj mi skończyć ten update bo inaczej będziesz musiał
    wszystko wyklikiwać od początku. Ewentualnie jeśli jak w Windowsie update
    jest przy wyłączaniu: to zamykanie trwa dłużej niż zwykle ze względu na
    aktualizację, więc wykaż się większą cierpliwością.

    --
    Grzegorz Niemirowski
    https://www.grzegorz.net/


  • 67. Data: 2023-02-17 23:06:16
    Temat: Re: C++ ośla łączka
    Od: "Grzegorz Niemirowski" <g...@g...net>

    Piotr Gałka <p...@c...pl> napisał(a):
    > No i w czasie tego przygotowywania się natknął się na info, że:
    > Jak się chce modyfikować flash to kawałek funkcji ma być wykonywany z
    > RAMu. To co ma być w RAMie kompiluje się bratu do 10 czy 12 bajtów. Na
    > zapas przekopiowywał do RAMu 40 bajtów, ale chciał to zrobić dokładnie, bo
    > kto wie, czy kiedyś jakaś kolejna wersja kompilatora czegoś tam nie wrzuci
    > i zrobi się ponad 40 bajtów.
    > On jest na etapie, że kiedyś wszystko pisał wyłącznie w asm, a obecnie
    > stara się wszystko napisać w C - że niby bardziej przenośne.
    > Ale nie udało mu się znaleźć metody policzenia tego "sizeof(funkcja)" więc
    > mówił mi dziś, że ten kawałek zostawi w asm aby nie mogło być żadnych
    > niespodzianek.

    Dlaczego chcecie sami kopiować tę funkcję? Czy skonfigurowanie odpowiedniej
    sekcji w skrypcie linkera nie wchodzi w grę? Przykładowo funkcja do zapisu
    Flash znadująca się w RAM-ie jest w bibliotekach ST:

    __RAM_FUNC HAL_FLASHEx_HalfPageProgram(uint32_t Address, uint32_t* pBuffer);

    Makro __RAM_FUNC zdefiniowane jest tak:

    #define __RAM_FUNC HAL_StatusTypeDef __attribute__((section(".RamFunc")))

    Czyli funkcja HAL_FLASHEx_HalfPageProgram jest oznaczona atrybutem
    umieszczającym ją w sekcji .RamFunc. Ta z kolei w skrypcie linkera jest
    umieszczana w sekcji .data:

    .data :
    {
    . = ALIGN(4);
    __data_init_start = LOADADDR(.data);
    PROVIDE(__data_init_start = __data_init_start);
    __data_start = .;
    PROVIDE(__data_start = __data_start);

    . = ALIGN(4);
    *(.data .data.* .gnu.linkonce.d.* .RamFunc)

    . = ALIGN(4);
    __data_end = .;
    PROVIDE(__data_end = __data_end);
    } > ram AT > rom

    --
    Grzegorz Niemirowski
    https://www.grzegorz.net/


  • 68. Data: 2023-02-17 23:58:04
    Temat: Re: C++ ośla łączka
    Od: heby <h...@p...onet.pl>

    On 17/02/2023 20:44, Piotr Gałka wrote:
    >> A co to za problem? Jak się przerwie programowanie z jakiekolwiek
    >> powodu to bootloader zaprogramuje ponownie po resecie.
    > Moim zdaniem zbyt optymistycznie do tego podchodzisz.
    > Jak flash będzie nie do końca zaprogramowany (bo zniknęło napięcie w
    > trakcie programowania) to może w większości przypadków dobrze się
    > odczytywać ale czasem źle. Taki błąd może być bardzo trudny do znalezienia.

    Jest bardzo łatwy. Przeciez nie zapomniałeś dodać sum kontrolnych a
    porządne urządzenie zazwyczaj sprawdzi swoje sumy kontrolne na starcie.
    Wiadomo, że nastapiło przerwanie programowania. Jedyny przypadek, kiedy
    to nie zadziała to chyba programowanie tego samego wsadu ponownie.

    > Kiedyś w naszym emulatorze EPROMów mieliśmy taki błąd, że średnio
    > statystycznie raz na 3 miliony odczytów jakiś jeden bit potrafił mu się
    > przekłamać.

    I jesteś pewny, że to statystycznie istotny przypadek? Mowa o tysiącach
    źle napisanych procedur upgrade firmware pisanych przez kiepskich
    programistów, a nie o przypadku jeden na miliony. Z resztą przy takiej
    statystyce to może być najzwyczajniej pamięc flash z marginalnym bitem,
    co wcale nie jest takie niemożliwe. Mogło go stuknąc nawet
    promieniowanie jonizujące, przypadki nie są wykluczone, ale szacujemy
    ryzyko i się nimi nie przejmujemy w typowych zastosowaniach.

    > To wszystko było jeszcze THT - się okazało, że jakiś kondensator trzeba
    > było bliżej nóg zasilających przenieść i problem zniknął.

    I czy aby na pewno miało to związek z błedami programowania czy bardziej
    z tym kondensatorem?

    Z ciekawostek, to równoległe pamięci flash mogły się "gorzej"
    programować, jesli impuls kasujący miał zła długość (nie pamiętam czy za
    długi czy za krótki, to było wieki temu). Znalezione przypadkiem przez
    kolegę który osiwiał przy jakimś systemie uC w latach 90. Tak że dam
    wiarę, że coś może pójść nie tak. Tylko czy aby na pewno to problem z
    firmware? Urządzenie z update firmware musi być sensownie zaprojektowane
    aby zaniki zasilania nie były możliwe w połowie programowania strony i
    to nie wydaje się jakoś super trudne do wymyślenia.


  • 69. Data: 2023-02-18 09:11:00
    Temat: Re: C++ ośla łączka
    Od: "J.F" <j...@p...onet.pl>

    On Fri, 17 Feb 2023 16:21:13 +0100, Grzegorz Niemirowski wrote:
    > heby <h...@p...onet.pl> napisał(a):
    >> Czyli sporej częsci urządzeń wyświetlajacych ten komunikat. Ja bym zaczął
    >> od Windowsa. Co prawda to nie flash, ale w sumie co za różnica.
    >
    > Bo tak właściwie to ten komunikat wcale nie musi oznaczać, że coś wybuchnie
    > jak wyłączysz nagle zasilanie. Windows nie psuje się od tego.

    Nie radze próbować.
    Zaden system plików nie lubi, jak mu wyłączyc nagle zasilanie,
    SSD nie lubi potrójnie,
    a i taka czesciowa aktualizacja może byc zgubna.

    J.



  • 70. Data: 2023-02-19 12:14:52
    Temat: Re: C++ ośla łączka
    Od: JDX <j...@o...pl>

    On 17.02.2023 14:51, heby wrote:
    > On 17/02/2023 10:17, JDX wrote:
    >> [*] Co nie przeszkodziło ludziom wyrzeźbić na tym RP2040 (serca
    >> Raspberry Pi Pico) - dwurdzeniowego MCU bez instrukcji wspierających
    >> synchronizację. :-)
    >
    > Czekaj, czekaj... Tam nie było jakiś spinlocków sprzętowych? Mam, ale
    > jeszcze nie programowałem, więc niewiele wiem praktycznie, ale jakiś
    > ochłap tam dali.
    >
    Tak, są 32 sprzętowe spinlocki w bloku SIO - jakiś mechanizm
    synchronizacji dać musieli bo inaczej wielordzeniowość tego MCU byłaby
    mało użyteczna. Ale IMO jest to rozwiązanie z kategorii sztuczek - nie
    jest to ,,standardowa" para instrukcji typu
    load-linked/store-conditional, której używają współczesne (i nie tylko)
    mejnstrimowe RISC-i.

strony : 1 ... 6 . [ 7 ] . 8 ... 10


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: