Hallo zusammen,
ich arbeite gerade an einem Projekt, bei dem ich den Embedded Coder von
Matlab benutze, um meine bestehende Software von einem bestehenden
System auf die µC von ST (STM32) zu übertragen.
der Code ist folgendermaßen:
1 | #include "main.h"
|
2 |
|
3 | void SystemClock_Config(void);
|
4 | static void MX_GPIO_Init(void);
|
5 |
|
6 | #include <stdio.h>
|
7 | #include "untitled.h"
|
8 | #include "rtwtypes.h"
|
9 |
|
10 | extern RT_MODEL_untitled *const untitled_M;
|
11 | extern void untitled_SetEventsForThisBaseStep(boolean_T*);
|
12 | static boolean_T OverrunFlags[1];
|
13 | static volatile uint32_t autoReloadTimerLoopVal_S = 1;
|
14 | static volatile uint32_t remainAutoReloadTimerLoopVal_S = 1;
|
15 |
|
16 | int main(void)
|
17 | {
|
18 | int_T i;
|
19 | HAL_Init();
|
20 | SystemClock_Config();
|
21 | MX_GPIO_Init();
|
22 |
|
23 | /* Systick configuration and enable SysTickHandler interrupt */
|
24 | if (SysTick_Config((uint32_t)(SystemCoreClock * 0.0001))) {
|
25 | autoReloadTimerLoopVal_S = 1;
|
26 | do {
|
27 | autoReloadTimerLoopVal_S++;
|
28 | } while ((uint32_t)(SystemCoreClock * 0.0001)/autoReloadTimerLoopVal_S >
|
29 | SysTick_LOAD_RELOAD_Msk);
|
30 |
|
31 | SysTick_Config((uint32_t)(SystemCoreClock * 0.0001)/autoReloadTimerLoopVal_S);
|
32 | }
|
33 |
|
34 | remainAutoReloadTimerLoopVal_S = autoReloadTimerLoopVal_S;//Set nb of loop to do
|
35 |
|
36 | for (i=0;i<1;i++) {
|
37 | OverrunFlags[i] = 0;
|
38 | }
|
39 |
|
40 | untitled_initialize();
|
41 |
|
42 | while (1) {
|
43 | /*Process tasks every solver time*/
|
44 | if (remainAutoReloadTimerLoopVal_S == 0) {
|
45 | remainAutoReloadTimerLoopVal_S = autoReloadTimerLoopVal_S;
|
46 |
|
47 | /* Check base rate for overrun */
|
48 | if (OverrunFlags[0]) {
|
49 | rtmSetErrorStatus(untitled_M, "Overrun");
|
50 | }
|
51 |
|
52 | OverrunFlags[0] = true;
|
53 |
|
54 | untitled_step();
|
55 | /* Indicate task for base rate complete */
|
56 | OverrunFlags[0] = false;
|
57 | }
|
58 | }
|
59 |
|
60 | }
|
61 |
|
62 | void HAL_SYSTICK_Callback(void)
|
63 | {
|
64 | if (remainAutoReloadTimerLoopVal_S) {
|
65 | remainAutoReloadTimerLoopVal_S--;
|
66 | }
|
67 | }
|
Mein Problem ist, dass ich ja die Hauptfunktion "untitled_step" in der
While (1) Schleife nicht ausführen kann, da der Wert
remainAutoReloadTimerLoopVal_S niemals 0 wird. Jetzt verstehe ich nicht,
wie Matlab dazu kommt zu etwas überhaupt zu Coden. Wenn ich meine
Funktion untitled_step aus der if-Anweisung raus tue ist alles fein.
Allerdings kann ich nicht durschauen, weshalb mir Matlab aus dem
Embedded Coder diese Ist-Schleife generiert hat. Hoffe ihr könnt mir
dabei helfen :)