Hallo alle zusammen,
ich hab da mal ein kleines Problem mit einem Atmega128.
Solange ich im Programm Befehle in der Main-Routine ausführe macht er
was er soll.
Bsp.:
1 | // **********************************************************************************
|
2 | // includes
|
3 | // **********************************************************************************
|
4 | #include <ecu.h>
|
5 | #include <atmel/io.h>
|
6 | #include <ecu.h>
|
7 | #include <mlx_90109.h>
|
8 | #include <timer.h>
|
9 | #include <atmel/interrupt.h>
|
10 | #include <dio.h>
|
11 | #include <comparator.h>
|
12 | #include <switch_pos.h>
|
13 | #include <rolling_dir.h>
|
14 |
|
15 |
|
16 | // **********************************************************************************
|
17 | // main program
|
18 | // **********************************************************************************
|
19 |
|
20 | int main (void)
|
21 | {
|
22 | DDRB = 0xFF;
|
23 | PORTB = 0x0F;
|
24 | PORTB = 0xF0;
|
25 | PORTB = 0x0F;
|
26 | PORTB = 0xF0;
|
27 | PORTB = 0x0F;
|
28 | PORTB = 0xF0;
|
29 |
|
30 | while (1)
|
31 | {
|
32 | }
|
33 |
|
34 | return 0;
|
35 | }
|
Werde diese Befehle jedoch in einer Funktion ausgeführt, welche über ein
header-file includiert wurde, dann spring der Controller in die
Funktion, führt dort die Befehlszeilen aus und springt am ende der
Funktion ins Nirvana.
Bsp.:
1 | / **********************************************************************************
|
2 | // includes
|
3 | // **********************************************************************************
|
4 | #include <ecu.h>
|
5 | #include <atmel/io.h>
|
6 | #include <ecu.h>
|
7 | #include <mlx_90109.h>
|
8 | #include <timer.h>
|
9 | #include <atmel/interrupt.h>
|
10 | #include <dio.h>
|
11 | #include <comparator.h>
|
12 | #include <switch_pos.h>
|
13 | #include <rolling_dir.h>
|
14 |
|
15 |
|
16 | // **********************************************************************************
|
17 | // main program
|
18 | // **********************************************************************************
|
19 |
|
20 | int main (void)
|
21 | {
|
22 | ecu_Init();
|
23 |
|
24 | while (1)
|
25 | {
|
26 | }
|
27 |
|
28 | return 0;
|
29 | }
|
Die Zeilen, welche vorher über der whileschleife standen werden jetzt
in der ecu_Init() ausgeührt. Der Controller springt auch in die
Funktion, springt aber am ende nicht heraus, sondern ins Nirvana.
Dieser Code war nur ein Beispiel, das gleiche geschieht immer, sobald
irgendwelche Befehle in einer externen Funktion ausgeführt werden
sollen.
Seltsam ist jedoch, dass ich genau die gleiche Hardware nochmal am
laufen hab, mit genau der selben Software, und da gehts.
Den Controller habe ich bereits gegen einen neuen ersetzt, das hat auch
nichts gebracht.
Kann denn so ein Phänomen durch einen schaltungsfehler verursacht
werden?
Hat jemand schonmal so ein Problem gehabt?
Schonmal im voraus
Gruß Micha