Stránka 4 z 4
Napsal: 16 led 2017, 20:02
od mtajovsky
Longin píše:taky bych chtěl takhle rozumět embedded věcem jako lesana
To není o rozumění embedded, to je o rozumění operačním systémům.
Mimochodem, lesana87, jak tam řešíte situaci, kdy v době zpracování volání systému z úrovně úlohy přijde interrupt, a v jeho obsluze je potřeba opět volat systémovou službu? Jinak - fakt, pěkné.
Napsal: 16 led 2017, 20:13
od lesana87
Z obsluhy přerušení se žádné systémové služby nevolají, myšleno ty, které se dají volat z user modu.
Napsal: 17 led 2017, 20:19
od lesana87
Mimochodem, když jsem upravovala ten editor ue, objevila jsem po x hodninách neúspěšného ladění moc veselý bug v SDCC 3.6.0.
Podmínku
přeloží jako
Kód: Vybrat vše
;ue.c:218: if (buf < curp)
ld iy,#_curp
ld a,0 (iy)
sub a, #<(_buf)
ld a,1 (iy)
sbc a, #>(_buf)
ret NC
;ue.c:219: --curp;
ld hl,(_curp)
dec hl
ld (_curp),hl
ret
tj. obráceně - chybně.
Tu samou podmínku jen napsanou v opačném pořadí
přeloží jako
Kód: Vybrat vše
;ue.c:218: if (curp > buf)
ld a,#<(_buf)
ld iy,#_curp
sub a, 0 (iy)
ld a,#>(_buf)
sbc a, 1 (iy)
ret NC
;ue.c:219: --curp;
ld hl,(_curp)
dec hl
ld (_curp),hl
ret
tj. správně. Už jsem si skoro rvala vlasy, proč to nechodí, když mě napadlo, projít instrukci po instrukci výsledný kód v asm. Fakt hrozně milej překladač.

Napsal: 18 led 2017, 14:03
od Wolfik
Na něčem podobném jsem vyhnil u diplomky (ARM GCCčko), kdy mi taky obdobnou podmínku přeložil do asembleru blbě, takže pointer do paměti mi přepisoval oblast, kde neměl vůbec co dělat.
Pár týdnů zpátky mě zas vyplísnil toolchain pro softprocesor ve FPGAčku. Ve vývojové fázi používám standartní i/o funkce C pro výpis debugovacích logů. Při nějaké konstelaci hvězd, tam docházelo k memory corruption, protože to interně používalo dynamickou zprávu paměti, která na těhle zařízeních není od výrobce dokonale vyladěna. Zkrátka to zapisovala data tam, kam nemá.
Avšak v dokumentaci k toolchainu se o tom nezmiňují...tam to zní jakože pokud chce programátor plnou funkčnost printf/scanf funkcí, tak použije ANSI verzi, pokud chce šetřit prostředkama, použije jejich osekanou verzi, která podle disassembly už malloc nepoužívá
