Hi,
ich hab einen code aus matlab generiert und erhalte einen hardfault der
mir nichts sagt (siehe bild).
Ich kann mir denken das es etwas damit zu tun hat das ich single, double
variablen benutze und irgendwie der arm damit nich klar kommt. FPU
funktioniert (dank anderem thread hier im forum).
Kann mir jemand mal auf die Sprünge helfen?
Hier ensteht der Fehler:
1 | main.c:
|
2 | .
|
3 | .
|
4 | .
|
5 | static boolean_T Shutdown_signal_data[10]; /* Shutdown vector <- Neu! */
|
6 | static int32_T Shutdown_signal_size[2]; /* the size of the Shutdown */
|
7 |
|
8 | static real32_T data_cut [640]; /*Data cut*/
|
9 | static real32_T ref_cut [640]; /*Data cut*/
|
10 | static real32_T Toleranz = 15; //Toleranz
|
11 |
|
12 |
|
13 | Algo_10Frames(data_cut, ref_cut, Toleranz, Shutdown_signal_data, Shutdown_signal_size);
|
14 |
|
15 |
|
16 | .
|
17 | .
|
18 | .
|
19 | algo.c:
|
20 | .
|
21 | .
|
22 | .
|
23 |
|
24 | /* Function Definitions */
|
25 | void Algo_10Frames(const real32_T data[640], const real32_T ref[640],
|
26 | real32_T vToleranz_percent, boolean_T
|
27 | Shutdown_signal_data[10], int32_T Shutdown_signal_size[2])
|
28 | {
|
29 | real_T y_data[640];
|
30 | real_T ydata_data[640];
|
31 | int32_T iy;
|
32 | int32_T theta_size[2];
|
33 | int32_T theta_data_size[2];
|
34 | real_T theta_data[256];
|
35 | real_T theta_data_data[256];
|
36 | real_T ydata_ueber_og_data[64];
|
37 | real_T ydata_unter_ug_data[64];
|
38 | real_T jetzt_abschalten_data[640];
|
39 | emxArray_real_T *r0;
|
40 | int32_T i;
|
41 | real_T b_y_data[10];
|
42 | int32_T ymodell_size[2];
|
43 | int32_T i2;
|
44 | int32_T ymodell_data_size[2];
|
45 | int32_T pix;
|
46 | real_T ymodell_data[800];
|
47 | real_T ymodell_data_data[800];
|
48 | real32_T Toleranz;
|
49 | real32_T y_p10_data[800];
|
50 | real32_T y_m10_data[800];
|
51 | int32_T i1;
|
52 | boolean_T exitg1;
|
53 |
|
54 | /* Current Parameters: 5px above tolerance anywhere, 20% for Shutdown signal = 1 */
|
55 |
|
56 | for (iy = 0; iy < 640; iy++) {
|
57 | y_data[iy] = 0.0;
|
58 | ydata_data[iy] = 0.0;
|
59 | }
|
60 |
|
61 | theta_size[0] = 4;
|
62 | theta_size[1] = 64;
|
63 | theta_data_size[0] = 4;
|
64 | theta_data_size[1] = 64;
|
65 | for (iy = 0; iy < 256; iy++) {
|
66 | theta_data[iy] = 0.0;
|
67 | theta_data_data[iy] = 0.0;
|
68 | }
|
69 |
|
70 | Delay(1);
|
71 |
|
72 |
|
73 | for (iy = 0; iy < 64; iy++) {
|
74 | ydata_ueber_og_data[iy] = 0.0;
|
75 | ydata_unter_ug_data[iy] = 0.0;
|
76 | }
|
77 |
|
78 | memset(&jetzt_abschalten_data[0], 0, 640U * sizeof(real_T));
|
79 |
|
80 | .
|
81 | .
|
82 | .
|
83 | .
|
84 | .
|
der fehler ensteht beim ersten durchlauf von der for schleife:
1 | for (iy = 0; iy < 640; iy++) {
|
2 | y_data[iy] = 0.0;
|
3 | ydata_data[iy] = 0.0;
|
4 | }
|
Reicht der Speicher vielleicht nich aus ?
Ich werd mal alles auf double stellen und nicht single und double
mischen.
Laut Keil nachm kompilieren:
Program Size: Code=39636 RO-data=816 RW-data=464 ZI-data=21104
Gruß
E