c: CallBack
Miroslav Draxal
evik na volny.cz
Čtvrtek Únor 25 00:06:48 CET 2021
Dobrý večer,
Jedná se o XC8 pro microchip.
Mějme několik místních procedur, každá procedura v jiném kompilovaném modulu
(Main.c, CallBack.c,). Tyto procedury se navzájem nemohou ovlivňovat, nejsou
v ISR, proto kompilátor pro vnitřní "svoje potřeby" může použít adresu
proměnné, která je ve všech procedurách stejná. (třeba adr. 0x00, kam si
ukládá data pro "svoje potřeby" )
Existuje technika, jak přinutit, aby pro jeden konkrétní modul (CallBack.c)
použil jedinečné adresy pro "svoje potřeby".
C nativně neumí CallBack, ale jde to velice jednoduše napsat. Proto píši, že
se procedury nemohou ovlivňovat a nejsou v ISR. Kompilátor neví, že z
přerušení skáču třeba doprostřed procedury.
Proč to? Používám zpětné volání z ISR. V "voidProc(void)" v Main.c, se
používá adr. proměnné 0x00 pro předání parametru(neovlivním jeho adresu),
přijde přerušení, z něj zpětným voláním volám proceduru v CallBack.c, která
taky používá adr. proměnné 0x00 ( také to neovlivním), kde se obsah změní, a
až se dostanu zpátky z přerušení, obsah paměti je změněn.
Asi to je prasárna. Ale v systému, kde mi běží na přerušeních všechno,
jakoby paralelně, je to zpětné volání fakt dobrá věc. Separované to běží
jako z praku, pokud to zavedu do systému, začnou se mi hádat proměnné.
Zasílám k nahlédnutí. Je to zatím neučesané.
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20210225/c9e383b2/attachment-0001.html>
------------- další část ---------------
An embedded and charset-unspecified text was scrubbed...
Name: OneWire_multidrop.c
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20210225/c9e383b2/attachment-0001.c>
------------- další část ---------------
An embedded and charset-unspecified text was scrubbed...
Name: OneWire_multidrop.h
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20210225/c9e383b2/attachment-0001.h>
Další informace o konferenci Hw-list