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

AtXmaga128 - Dwuwymiarowa tablica w ASM, czy jest możliwa ?

ASMnauka_ 19 Paź 2015 19:29 975 10
  • #2 15080552
    tadzik85
    Poziom 38  
    Przecież taki twór nie jest niczym nadzwyczajnym.....
  • #3 15080580
    BlueDraco
    Specjalista - Mikrokontrolery
    Każdy kompilator "pisze program w asemblerze" więc oczywiście jest to możliwe. Nie rozumiem tylko w jakim celu programista miałby się katować asemblerem zamiast pisać w C. AVR to nie 51 czy PIC; kompilator języka wysokiego poziomu generuje dość przyzwoity i wydajny kod, więc po co utrudniać sobie życie?
  • #4 15080582
    ASMnauka_
    Poziom 15  
    tadzik85 napisał:
    Przecież taki twór nie jest niczym nadzwyczajnym.....

    Owszem, dla kogoś, kto zna ASM nie.
    Dla początkującego jest to trudność.

    Dodano po 2 [minuty]:

    BlueDraco napisał:
    ... więc po co utrudniać sobie życie?

    Ponieważ uwielbiam zmuszać szare komórki do wysiłku.
  • #5 15080601
    tmf
    VIP Zasłużony dla elektroda
    Każdą n-wymiarową tablicę o stałej długości elementów można przekształcić w tablicę 1-wymiarową i tak też robi kompilator. Czyli po kolei ma pierwszy 1-wymiarowy element, po nim kolejny, po nim kolejny itd. W efekcie dostęp do każdego elementu [x,y] to dostęp pod adres y*(wielkość pojedynczego elementu) + x. Jeśli elementy różnią się wielkością to potrzebne są wskaźniki (ofsety) do kolejnych elementów.
    Tez zapytam, co cię skłoniło do asmeblera? Szczególnie na takim procku jak XMEGA? Rozumiem asm jako plomby do C, ale żeby tak wszystko w asm? Hardcore lub religia :) Szare komórki można też ćwiczyć w C.
  • #6 15080765
    ASMnauka_
    Poziom 15  
    tmf napisał:
    Tez zapytam, co cię skłoniło do asmeblera? Szczególnie na takim procku jak XMEGA? Rozumiem asm jako plomby do C, ale żeby tak wszystko w asm? Hardcore lub religia :) Szare komórki można też ćwiczyć w C.

    Skłonił mnie znajomy informatyk - mechatronik.
    Osobiście widziałem, co potrafi zdziałać, jak to działa, oraz w jakim mikro kontrolerze można upchać tak wiele.
    Co bardzo istotne, ów kolega nie używa zmiennych, funkcji itd.
    W jego programach występują jedynie stałe i etykiety.
    A co do C, to fakt, zaczynał od niego, lecz z czasem stwierdził, że niestety nie ma pełnej kontroli nad rejestrami więc od tego czasu pisze jedynie w ASM.
  • #7 15080846
    tmf
    VIP Zasłużony dla elektroda
    Jeśli mu rejestrów zabraknie to gdzieś dane upchać musi, czyli zmiennych używa. Funkcji w asemblerze nie ma, ale zapewne RCALL, czy CALL używa, to jest asemblerowy odpowiednik funkcji w C. Cudów nie ma. O ile w prostych programach przewaga asemblera jest spora (szczególnie dla wybranych przykładów), o tyle w programie, który daje 128 kB kod wynikowy (a nawet taki 5-10 kB) asembler często nie ma przewagi nad C, gdyż kompilator jest w stanie robić globalne optymalizacje, których praktycznie nie jest w stanie zrobić człowiek. Jacyś wybitni programiści i wirtuozi asemblera może przy takim kodzie jeszcze wypadli by lepiej niż kompilator, ale idę o zakład, że przy kodzie wynikowym rzędu 20 i więcej kB żaden człowiek nie wypadnie lepiej niż kompilator. A jeśli połączymy C z wstawkami w asemblerze to zaryzykuję twierdzenie, że każdy nietrywialny program łączący C + asm, będzie lepszy niż program w czystym asm. Ale tu wchodzimy na tematy religijne...
    Inna sprawa, że jeśli używasz procka ze 128 kB FLASH, a program ma np. 100 kB, to jego upchnięcie do nawet 20 kB kompletnie nic ci nie daje.
  • #8 15080920
    ASMnauka_
    Poziom 15  
    tmf napisał:
    Jeśli mu rejestrów zabraknie to gdzieś dane upchać musi, czyli zmiennych używa.

    Niestety używa pamięci zewnętrznej FLASH i tam ma zapisane wszystkie niezbędne dane.
    Owszem można to traktować jako dodatkową pamięć na zmienne.
    tmf napisał:
    Inna sprawa, że jeśli używasz procka ze 128 kB FLASH...

    XMegęA1 wybrałem jedynie dlatego, że posiada wiele więcej, niż ATiny, lub Mega16,32,64 itp.
    Ma o wiele więcej peryferiów.
    A co najważniejsze można zastosować zewnętrzna pamięć SRAM\SDRAM.
    Pomijam fakt EBI itd.
  • #9 15081064
    BlueDraco
    Specjalista - Mikrokontrolery
    Kolego, wypisujesz banialuki (delikatnie rzecz ujmując), również w imieniu swjego kolegi.

    W programowaniu chodzi o niezawodność (w tym łatwość usuwania błędów) i wydajność, a nie o "kontrolę nad rejestrami". Pod względem prawdopodobieństwa błędu asembler jest dużo gorszy od C, a pod względem wydajności - na starych architekturach (51, PIC10/12/16) lepszy, a na nowych - podobny do C, pod warunkiem jednak, że programista jest geniuszem, bo średni programista pisząc w asemblerze na procesor z wieloma rejestrami (np. AVR, ARM) na ogół optymalizuje kod znacznie gorzej niż kompilator C.

    Programowanie w asemblerze współczesnych maszyn - to zwykle ślepy zaułek. Ja sam programowałem w kilkunastu asemblerach przez kilkanaście lat, a teraz już od ponad 10 lat tego nie robię - bo nie ma to kompletnie sensu. Zdarzają mi się (b. rzadko) pojedyncze procedury asemblerowe w programach pisanych w C.
  • #10 15081541
    zmyslonyy
    Poziom 27  
    Ja bym jednak nie odsądzał innych od czci i wiary za chęć poznania asemblera czy w ogóle poznania działania i architektury mikrokontrolerów. Na małych mikrokontrolerach to jest dość wystarczające i wydajne narzędzie i uczy pokory w poszukiwaniu błędów.
  • #11 15081599
    megao
    Poziom 24  
    ASMnauka_ napisał:
    tmf napisał:
    Jeśli mu rejestrów zabraknie to gdzieś dane upchać musi, czyli zmiennych używa.

    Niestety używa pamięci zewnętrznej FLASH i tam ma zapisane wszystkie niezbędne dane.

    Pamięć FLASH do przechowywania zmiennych?
    Proponowałbym poczytać trochę literatury i zacząć od prostszych układów.
REKLAMA