1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-26 15:54:15 +01:00

REVONANO - Prevent modules to start before init: move most code to pios_initcall.h. System and system-Like modules

This commit is contained in:
Alessio Morale 2014-12-04 01:23:35 +01:00
parent efb6855f6f
commit 3563b1ff0e
5 changed files with 15 additions and 9 deletions

View File

@ -66,6 +66,7 @@
static xTaskHandle systemTaskHandle; static xTaskHandle systemTaskHandle;
static bool stackOverflow; static bool stackOverflow;
static bool mallocFailed; static bool mallocFailed;
volatile int initTaskDone = 0;
// Private functions // Private functions
static void systemTask(void *parameters); static void systemTask(void *parameters);
@ -113,6 +114,9 @@ static void systemTask(__attribute__((unused)) void *parameters)
uint16_t prev_rx_count = 0; uint16_t prev_rx_count = 0;
bool first_time = true; bool first_time = true;
while (!initTaskDone) {
vTaskDelay(10);
}
/* create all modules thread */ /* create all modules thread */
MODULE_TASKCREATE_ALL; MODULE_TASKCREATE_ALL;

View File

@ -102,6 +102,8 @@ static bool mallocFailed;
static HwSettingsData bootHwSettings; static HwSettingsData bootHwSettings;
static FrameType_t bootFrameType; static FrameType_t bootFrameType;
volatile int initTaskDone = 0;
// Private functions // Private functions
static void objectUpdatedCb(UAVObjEvent *ev); static void objectUpdatedCb(UAVObjEvent *ev);
static void checkSettingsUpdatedCb(UAVObjEvent *ev); static void checkSettingsUpdatedCb(UAVObjEvent *ev);
@ -171,8 +173,6 @@ int32_t SystemModInitialize(void)
return 0; return 0;
} }
extern volatile int initTaskDone;
MODULE_INITCALL(SystemModInitialize, 0); MODULE_INITCALL(SystemModInitialize, 0);
/** /**
* System task, periodically executes every SYSTEM_UPDATE_PERIOD_MS * System task, periodically executes every SYSTEM_UPDATE_PERIOD_MS

View File

@ -60,6 +60,7 @@ extern uint32_t pios_com_main_id;
// Private variables // Private variables
static xTaskHandle systemTaskHandle; static xTaskHandle systemTaskHandle;
static enum { STACKOVERFLOW_NONE = 0, STACKOVERFLOW_WARNING = 1, STACKOVERFLOW_CRITICAL = 3 } stackOverflow; static enum { STACKOVERFLOW_NONE = 0, STACKOVERFLOW_WARNING = 1, STACKOVERFLOW_CRITICAL = 3 } stackOverflow;
volatile int initTaskDone = 0;
static bool mallocFailed; static bool mallocFailed;
@ -106,6 +107,9 @@ static void gpspSystemTask(__attribute__((unused)) void *parameters)
#ifdef PIOS_INCLUDE_WDG #ifdef PIOS_INCLUDE_WDG
PIOS_WDG_UpdateFlag(PIOS_WDG_SYSTEM); PIOS_WDG_UpdateFlag(PIOS_WDG_SYSTEM);
#endif #endif
while (!initTaskDone) {
vTaskDelay(10);
}
/* create all modules thread */ /* create all modules thread */
MODULE_TASKCREATE_ALL; MODULE_TASKCREATE_ALL;

View File

@ -50,7 +50,7 @@ typedef struct {
/* Init module section */ /* Init module section */
extern initmodule_t __module_initcall_start[], __module_initcall_end[]; extern initmodule_t __module_initcall_start[], __module_initcall_end[];
extern volatile int initTaskDone;
#ifdef USE_SIM_POSIX #ifdef USE_SIM_POSIX
extern void InitModules(); extern void InitModules();
@ -69,9 +69,10 @@ extern void StartModules();
/* Initialize modules */ \ /* Initialize modules */ \
InitModules(); \ InitModules(); \
/* Initialize the system thread */ \ /* Initialize the system thread */ \
SystemModInitialize(); } SystemModInitialize(); \
initTaskDone = 1; }
#else #else // ifdef USE_SIM_POSIX
/* initcalls are now grouped by functionality into separate /* initcalls are now grouped by functionality into separate
* subsections. Ordering inside the subsections is determined * subsections. Ordering inside the subsections is determined
@ -96,6 +97,7 @@ extern void StartModules();
if (fn->fn_minit) { \ if (fn->fn_minit) { \
(fn->fn_minit)(); } \ (fn->fn_minit)(); } \
} \ } \
initTaskDone = 1; \
} }
#define MODULE_TASKCREATE_ALL \ #define MODULE_TASKCREATE_ALL \

View File

@ -115,8 +115,6 @@ int main()
return 0; return 0;
} }
volatile int initTaskDone = 0;
/** /**
* Initialisation task. * Initialisation task.
* *
@ -130,8 +128,6 @@ void initTask(__attribute__((unused)) void *parameters)
/* Initialize modules */ /* Initialize modules */
MODULE_INITIALISE_ALL; MODULE_INITIALISE_ALL;
initTaskDone = 1;
/* terminate this task */ /* terminate this task */
vTaskDelete(NULL); vTaskDelete(NULL);
} }