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