mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-27 17:06:31 +08:00
sys_time: specify duration in seconds instead of SYS_TIME_TICKS when registering or updating a timer
This commit is contained in:
@@ -70,7 +70,7 @@ endif
|
|||||||
ifndef PERIODIC_FREQUENCY
|
ifndef PERIODIC_FREQUENCY
|
||||||
PERIODIC_FREQUENCY = 60
|
PERIODIC_FREQUENCY = 60
|
||||||
endif
|
endif
|
||||||
$(TARGET).CFLAGS += -DPERIODIC_TASK_PERIOD='CPU_TICKS_OF_SEC((1./$(PERIODIC_FREQUENCY).))' -DPERIODIC_FREQUENCY=$(PERIODIC_FREQUENCY)
|
$(TARGET).CFLAGS += -DPERIODIC_FREQUENCY=$(PERIODIC_FREQUENCY)
|
||||||
$(TARGET).srcs += mcu_periph/sys_time.c $(SRC_ARCH)/mcu_periph/sys_time_arch.c
|
$(TARGET).srcs += mcu_periph/sys_time.c $(SRC_ARCH)/mcu_periph/sys_time_arch.c
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -528,7 +528,7 @@ void periodic_task_ap( void ) {
|
|||||||
void init_ap( void ) {
|
void init_ap( void ) {
|
||||||
#ifndef SINGLE_MCU /** init done in main_fbw in single MCU */
|
#ifndef SINGLE_MCU /** init done in main_fbw in single MCU */
|
||||||
mcu_init();
|
mcu_init();
|
||||||
sys_time_register_timer(SYS_TIME_TIMER_S(1./PERIODIC_FREQUENCY), NULL);
|
sys_time_register_timer((1./PERIODIC_FREQUENCY), NULL);
|
||||||
#endif /* SINGLE_MCU */
|
#endif /* SINGLE_MCU */
|
||||||
|
|
||||||
/************* Sensors initialization ***************/
|
/************* Sensors initialization ***************/
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ void init_fbw( void ) {
|
|||||||
|
|
||||||
mcu_init();
|
mcu_init();
|
||||||
|
|
||||||
sys_time_register_timer(SYS_TIME_TIMER_S(1./PERIODIC_FREQUENCY), NULL);
|
sys_time_register_timer((1./PERIODIC_FREQUENCY), NULL);
|
||||||
|
|
||||||
electrical_init();
|
electrical_init();
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ int main( void ) {
|
|||||||
static inline void main_init( void ) {
|
static inline void main_init( void ) {
|
||||||
|
|
||||||
mcu_init();
|
mcu_init();
|
||||||
sys_time_register_timer(PERIODIC_TASK_PERIOD, NULL);
|
sys_time_register_timer((1./PERIODIC_FREQUENCY), NULL);
|
||||||
mb_tacho_init();
|
mb_tacho_init();
|
||||||
|
|
||||||
#if defined USE_TWI_CONTROLLER
|
#if defined USE_TWI_CONTROLLER
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ int main( void ) {
|
|||||||
|
|
||||||
static inline void main_init( void ) {
|
static inline void main_init( void ) {
|
||||||
mcu_init();
|
mcu_init();
|
||||||
sys_time_register_timer(PERIODIC_TASK_PERIOD, NULL);
|
sys_time_register_timer(1./PERIODIC_FREQUENCY, NULL);
|
||||||
main_init_tacho();
|
main_init_tacho();
|
||||||
mcu_int_enable();
|
mcu_int_enable();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ STATIC_INLINE void main_init( void ) {
|
|||||||
|
|
||||||
mcu_init();
|
mcu_init();
|
||||||
|
|
||||||
sys_time_register_timer(SYS_TIME_TIMER_S(1./PERIODIC_FREQUENCY), NULL);
|
sys_time_register_timer((1./PERIODIC_FREQUENCY), NULL);
|
||||||
|
|
||||||
electrical_init();
|
electrical_init();
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ int main( void ) {
|
|||||||
|
|
||||||
static inline void main_init( void ) {
|
static inline void main_init( void ) {
|
||||||
mcu_init();
|
mcu_init();
|
||||||
sys_time_register_timer(PERIODIC_TASK_PERIOD, NULL);
|
sys_time_register_timer((1./PERIODIC_FREQUENCY), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void main_periodic_task( void ) {
|
static inline void main_periodic_task( void ) {
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ int main( void ) {
|
|||||||
|
|
||||||
static inline void main_init( void ) {
|
static inline void main_init( void ) {
|
||||||
mcu_init();
|
mcu_init();
|
||||||
sys_time_register_timer(PERIODIC_TASK_PERIOD, NULL);
|
sys_time_register_timer((1./PERIODIC_FREQUENCY), NULL);
|
||||||
uart0_init_tx();
|
uart0_init_tx();
|
||||||
mcu_int_enable();
|
mcu_int_enable();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ int main( void ) {
|
|||||||
|
|
||||||
static inline void main_init( void ) {
|
static inline void main_init( void ) {
|
||||||
mcu_init();
|
mcu_init();
|
||||||
sys_time_register_timer(PERIODIC_TASK_PERIOD, NULL);
|
sys_time_register_timer((1./PERIODIC_FREQUENCY), NULL);
|
||||||
uart0_init_tx();
|
uart0_init_tx();
|
||||||
mcu_int_enable();
|
mcu_int_enable();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ int main( void ) {
|
|||||||
|
|
||||||
static inline void main_init( void ) {
|
static inline void main_init( void ) {
|
||||||
mcu_init();
|
mcu_init();
|
||||||
sys_time_register_timer(PERIODIC_TASK_PERIOD, NULL);
|
sys_time_register_timer((1./PERIODIC_FREQUENCY), NULL);
|
||||||
uart0_init_tx();
|
uart0_init_tx();
|
||||||
mcu_int_enable();
|
mcu_int_enable();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ int main( void ) {
|
|||||||
|
|
||||||
static inline void main_init( void ) {
|
static inline void main_init( void ) {
|
||||||
mcu_init();
|
mcu_init();
|
||||||
sys_time_register_timer(PERIODIC_TASK_PERIOD, NULL);
|
sys_time_register_timer((1./PERIODIC_FREQUENCY), NULL);
|
||||||
usb_serial_init();
|
usb_serial_init();
|
||||||
mcu_int_enable();
|
mcu_int_enable();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
#include "mcu.h"
|
#include "mcu.h"
|
||||||
#include "mcu_periph/uart.h"
|
#include "mcu_periph/uart.h"
|
||||||
#include "mcu_periph/sys_time.h"
|
#include "mcu_periph/sys_time.h"
|
||||||
|
#include "led.h"
|
||||||
|
|
||||||
static inline void main_init( void );
|
static inline void main_init( void );
|
||||||
static inline void main_periodic( void );
|
static inline void main_periodic( void );
|
||||||
@@ -40,15 +41,16 @@ int main(void) {
|
|||||||
main_init();
|
main_init();
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
if (sys_time_periodic())
|
if (sys_time_check_and_ack_timer(0))
|
||||||
main_periodic();
|
main_periodic();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void main_init( void ) {
|
static inline void main_init( void ) {
|
||||||
mcu_init();
|
mcu_init();
|
||||||
sys_time_init();
|
sys_time_register_timer((1./PERIODIC_FREQUENCY), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void main_periodic( void ) {
|
static inline void main_periodic( void ) {
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ void Delay(__IO uint32_t nCount) {
|
|||||||
int main(void) {
|
int main(void) {
|
||||||
|
|
||||||
mcu_init();
|
mcu_init();
|
||||||
sys_time_register_timer(SYS_TIME_TIMER_S(1./512.), NULL);
|
sys_time_register_timer((1./PERIODIC_FREQUENCY), NULL);
|
||||||
|
|
||||||
/* init RCC */
|
/* init RCC */
|
||||||
RCC_APB2PeriphClockCmd(A_PERIPH , ENABLE);
|
RCC_APB2PeriphClockCmd(A_PERIPH , ENABLE);
|
||||||
@@ -83,7 +83,8 @@ int main(void) {
|
|||||||
if (sys_time_check_and_ack_timer(0))
|
if (sys_time_check_and_ack_timer(0))
|
||||||
main_periodic();
|
main_periodic();
|
||||||
main_event();
|
main_event();
|
||||||
};
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,15 +32,15 @@
|
|||||||
|
|
||||||
struct sys_time sys_time;
|
struct sys_time sys_time;
|
||||||
|
|
||||||
uint8_t sys_time_register_timer(uint32_t duration, sys_time_cb cb) {
|
uint8_t sys_time_register_timer(float duration, sys_time_cb cb) {
|
||||||
|
|
||||||
uint32_t start_time = sys_time.nb_tick;
|
uint32_t start_time = sys_time.nb_tick;
|
||||||
for (int i = 0; i< SYS_TIME_NB_TIMER; i++) {
|
for (int i = 0; i< SYS_TIME_NB_TIMER; i++) {
|
||||||
if (!sys_time.timer[i].in_use) {
|
if (!sys_time.timer[i].in_use) {
|
||||||
sys_time.timer[i].cb = cb;
|
sys_time.timer[i].cb = cb;
|
||||||
sys_time.timer[i].elapsed = FALSE;
|
sys_time.timer[i].elapsed = FALSE;
|
||||||
sys_time.timer[i].end_time = start_time + duration;
|
sys_time.timer[i].end_time = start_time + SYS_TIME_TICKS_OF_SEC(duration);
|
||||||
sys_time.timer[i].duration = duration;
|
sys_time.timer[i].duration = SYS_TIME_TICKS_OF_SEC(duration);
|
||||||
sys_time.timer[i].in_use = TRUE;
|
sys_time.timer[i].in_use = TRUE;
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
@@ -59,10 +59,10 @@ void sys_time_cancel_timer(uint8_t id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: race condition ??
|
// FIXME: race condition ??
|
||||||
void sys_time_update_timer(uint8_t id, uint32_t duration) {
|
void sys_time_update_timer(uint8_t id, float duration) {
|
||||||
mcu_int_disable();
|
mcu_int_disable();
|
||||||
sys_time.timer[id].end_time -= (sys_time.timer[id].duration - duration);
|
sys_time.timer[id].end_time -= (sys_time.timer[id].duration - SYS_TIME_TICKS_OF_SEC(duration));
|
||||||
sys_time.timer[id].duration = duration;
|
sys_time.timer[id].duration = SYS_TIME_TICKS_OF_SEC(duration);
|
||||||
mcu_int_enable();
|
mcu_int_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -64,9 +64,26 @@ extern struct sys_time sys_time;
|
|||||||
#define cpu_time_ticks sys_time.nb_sec_rem
|
#define cpu_time_ticks sys_time.nb_sec_rem
|
||||||
|
|
||||||
extern void sys_time_init(void);
|
extern void sys_time_init(void);
|
||||||
extern uint8_t sys_time_register_timer(uint32_t duration, sys_time_cb cb);
|
|
||||||
|
/**
|
||||||
|
* Register a new system timer.
|
||||||
|
* @param duration Duration in seconds until the timer elapses.
|
||||||
|
* @param cb Callback function that is called from the ISR when timer elapses, or NULL
|
||||||
|
*/
|
||||||
|
extern uint8_t sys_time_register_timer(float duration, sys_time_cb cb);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancel a system timer by id.
|
||||||
|
* @param id Timer id.
|
||||||
|
*/
|
||||||
extern void sys_time_cancel_timer(uint8_t id);
|
extern void sys_time_cancel_timer(uint8_t id);
|
||||||
extern void sys_time_update_timer(uint8_t id, uint32_t duration);
|
|
||||||
|
/**
|
||||||
|
* Update the duration until a timer elapses.
|
||||||
|
* @param id Timer id
|
||||||
|
* @param duration Duration in seconds until the timer elapses.
|
||||||
|
*/
|
||||||
|
extern void sys_time_update_timer(uint8_t id, float duration);
|
||||||
|
|
||||||
static inline bool_t sys_time_check_and_ack_timer( uint8_t id ) {
|
static inline bool_t sys_time_check_and_ack_timer( uint8_t id ) {
|
||||||
if (sys_time.timer[id].elapsed) {
|
if (sys_time.timer[id].elapsed) {
|
||||||
@@ -94,8 +111,6 @@ static inline bool_t sys_time_check_and_ack_timer( uint8_t id ) {
|
|||||||
#endif
|
#endif
|
||||||
#define SYS_TIME_RESOLUTION_CPU_TICKS CPU_TICKS_OF_SEC(SYS_TIME_RESOLUTION)
|
#define SYS_TIME_RESOLUTION_CPU_TICKS CPU_TICKS_OF_SEC(SYS_TIME_RESOLUTION)
|
||||||
|
|
||||||
#define SYS_TIME_TIMER_S(_s) ((_s)/SYS_TIME_RESOLUTION)
|
|
||||||
|
|
||||||
#define SYS_TIME_TICKS_OF_SEC(s) (uint32_t)((s) / SYS_TIME_RESOLUTION + 0.5)
|
#define SYS_TIME_TICKS_OF_SEC(s) (uint32_t)((s) / SYS_TIME_RESOLUTION + 0.5)
|
||||||
#define SYS_TIME_TICKS_OF_USEC(us) SYS_TIME_TICKS_OF_SEC((us) * 1e-6)
|
#define SYS_TIME_TICKS_OF_USEC(us) SYS_TIME_TICKS_OF_SEC((us) * 1e-6)
|
||||||
#define SYS_TIME_TICKS_OF_NSEC(ns) SYS_TIME_TICKS_OF_SEC((ns) * 1e-9)
|
#define SYS_TIME_TICKS_OF_NSEC(ns) SYS_TIME_TICKS_OF_SEC((ns) * 1e-9)
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ static inline void main_event( void );
|
|||||||
int main(void) {
|
int main(void) {
|
||||||
|
|
||||||
mcu_init();
|
mcu_init();
|
||||||
unsigned int tmr_02 = sys_time_register_timer(SYS_TIME_TIMER_S(0.2), NULL);
|
unsigned int tmr_02 = sys_time_register_timer(0.2, NULL);
|
||||||
unsigned int tmr_03 = sys_time_register_timer(SYS_TIME_TIMER_S(0.3), NULL);
|
unsigned int tmr_03 = sys_time_register_timer(0.3, NULL);
|
||||||
sys_time_register_timer(SYS_TIME_TIMER_S(0.5), main_periodic_05);
|
sys_time_register_timer(0.5, main_periodic_05);
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
if (sys_time_check_and_ack_timer(tmr_02))
|
if (sys_time_check_and_ack_timer(tmr_02))
|
||||||
|
|||||||
Reference in New Issue
Block a user