Problem mit Keil Compiler V6

Gast #5926221
Lesenswert?

Hallo zusammen,
ich wollte gerade den "neuen" Compiler von Keil testen, dann bin ich auf 
ein Problem gestoßen. Das Programm funktioniert ohne Probleme mit der 
Compiler Version 5.
Beide auf der Optimierungsstufe -O1 und in beiden Fällen wird systick_ms 
durch die Interrupt inkrementiert.

Der Compiler baut eine unendliche Schleife ein. Woher kommt das 
Verhalten, denkt der Compiler der Rückgabewert von systick_get() wird 
sich nie ändern, deswegen ende Gelände?

Mein timer.c
1
static uint32_t systick_ms=0;
2

3
void systick_add(void)
4
{
5
    systick_ms++;
6
}    
7

8
uint32_t systick_get(void)
9
{
10
    return systick_ms;
11
}    
12

13
void systick_delay_ms(uint32_t delay_ms)
14
{
15
    delay_ms += systick_get();    
16
    while(delay_ms>systick_get());
17
}

timer.h
1
#ifndef TIMER_H
2
#define TIMER_H
3

4

5
#include <stdint.h>
6
#include "stm32f10x.h"
7

8
// Systick
9
void systick_add(void);
10
uint32_t systick_get(void);
11
void systick_delay_ms(uint32_t delay_ms);
12
void systick_CMD(uint8_t enable_disable);
13
    
14
#endif




stm32f10x_it.c
1
#include "timer.h"
2

3
void SysTick_Handler(void)
4
{
5
    systick_add();
6
}

Läuft auf dem STM32f103C8
Keil uVision 5.28
Compiler V5.06 update 6 und V6.12
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren