Jag blir galen (e²studio, GNU-RX, sporadisk funktion) *LÖST!

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Icecap
Inlägg: 26150
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Jag blir galen (e²studio, GNU-RX, sporadisk funktion) *LÖST!

Inlägg av Icecap »

Målprocessor:
Renesas RX210 (M5F52108ADFP)

Kompiler:
KPIT GNURX-ELF v15.01.

Inget RTOS eller liknande.

Jag skriver program och självklart är det ibland att man gör fel men ibland blir det rätt.
Det som stör mig RIKTIGT mycket är att samma källkod kan fungera ena gång man kompilerar men inte nästa.

Jag använder de interrupts som hör ihop med 3 av de seriella kanaler, AD-omvandlaren, intern timer 0 samt den interna oscillator på 50MHz. Jag definierar som vanligt USE_RS232_A, USE_RS232_B, USE_CMT0 osv. som då definierar interruptrutinerna och de basala funktioner som ska finnas där.

Det hela fungerar nästan bra men det är nästan som driver mig till vansinne!

Och jag kan inte stega ner till HEW, kompilern till den är helt enkelt för gammal.

Nu hade jag en version som inte kom "ner" i main-loop. Ser. interrupten fungerade, den reagerade på att jag skrev via terminalen men den behandlade inget.

Jag lade till en "LED_Yellow = true; // TEST ONLY" rad direkt innan "while(true)" - och plötsligt fungerar det så långt att main-loopen kom igång. Alltså helt utan anledning.

Min EEPROM-rutiner har fungerat perfekt under lång tid - men med denna kompiler går det inte att få det att fungera. Det är en bit-bang I²C och inger är ändrat men det fungerar inte!

EDIT: Hå hå, ja ja. Tydligen ställs "optimeringen" till kodstorlek automatisk. Efter att ha ställd den till "Ingen Optimering" blir koden såklart en del större men nu fungerar det mesta ändå.

MER EDIT: Jepp, nu tror jag att det är i mål. Har inte ändrat optimeringen men vid att ändra i.stack till 0x00004400 och .ustack till 0x00004200 i linkern fungerar programmet som det ska. Problemet som var kvar var att sprintf() vägrade fungera.