[elektro] STM32F4 -- I/O problema -- fagyas
hg12345
hg12345 at freemail.hu
Thu Oct 22 17:06:38 CEST 2015
Hi,
Ebből sejthető mit csinál a programod, de a struktúra pointer mutathat akárhová is... szóval ebből semmi nem derül ki!
Ezek nem 8 bites uC-relek, itt nincs fagyás! Ezzel érdemes lenne tisztába lenni.
Bármilyen hiba van az ARM uC-ban, akkor automatikusan elmennek a service IT-kre, ha nem foglalkoztál vele, akkor minden service IT-n egy végtelen ciklus űl (egy WEAK asm-ben C-ben definiált kód és mindig végtelen ciklusra írják a programozók), amiből nem tudod kivenni (mert ezeknél magasabb prioritású IT nem létezik ebben a környezetben), csak resettel a programot.
Első nekifutásra ki kéne nyomozni, melyik szerviz IT-re futottál, ez meg van akkor már detektáltad a hiba okát is.
Ajánlom figyelmedbe (-3),-2,-1,0,1, 2 helyeken lévő IT vektorokat, ezekhez tartozó feldolgozó részbe tegyél BRK-t és egy pillanat alatt meglesz mi okozza a hibát. ((( Nem csak a SW hibák, de a valódi HW és külső zavar hibák is idekergeti a program futását)))
Ha ennél többet akarsz tudni, akkor a hiba rutinokhoz tartozó regisztereket ki tudod küldeni egy listázó kimenetre, akkor nem is kell debugger. (de ez se egyszerű) (((Egy erős külső zavar miatti HW hiba esetén nagyon izgalmas tud lenne egy ilyen regiszter tartalom lista, de megfogja)))
"uprogc ." <uprogc at gmail.com> írta:
>Sziasztok,
>
>Elakadtam I/O ugyben.
>Az alabbi kod fagyast okoz. Kulon kulon futtatva a fuggvenyeket nincs
>problema. Egymas utan futtatva viszont fagyas van. Mindket fv a C portot
>hasznalja.
>Arra rajottem hogy ha a C porton valtoztatok kimeneti biteket egymas utan,
>attol fagy (ebbe az esetben legalabbis,..), ha a C porton egy bitet
>megvaltoztatok utanna az E porton is egy bitet, attol nem fagy ki.
>
>*Mi a csuda lehet ?*
>
>
>
>*FVek:*void af_amp_onnoff( unsigned char onoff) // 1: ON, 0: OFF
>{
> if(onoff == 1)
> CTRL_ANALOG_BOARD_PORTC->BSRRL = CTRL_AF_AMP; // 1
> else
> CTRL_ANALOG_BOARD_PORTC->BSRRH = CTRL_AF_AMP; // 0
>}
>
>
>void sw_rx_tx(unsigned char rxtx) // 1: TX, 0: RX
>{
> if(rxtx == 1) // tx
> {
> CTRL_ANALOG_BOARD_PORTC->BSRRL = SW_RX_TX ; // 1
> }
> else // rx
> {
> CTRL_ANALOG_BOARD_PORTC->BSRRH = SW_RX_TX ; // 0
> }
>}
>
>
>*Nyomogomb esemenyre:*
>
> mode_rxtx ^= 1;
>
> if(mode_rxtx == 0) // TX mode
> {
> e_rxtx = MODE_TX; //
>
> sw_rx_tx(1); // 0:
>RX, 1: TX
> af_amp_onnoff(0);
> }
> else
>// RX mode
> {
> e_rxtx = MODE_RX; //
>
> sw_rx_tx(0); // 0:
>RX, 1: TX
> af_amp_onnoff(1);;
> }
>
>Udv.
>Szabi
>-----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list