mirror of
https://github.com/Ralim/IronOS.git
synced 2025-02-26 07:53:55 +00:00
Split power work into own thread
Completely forseeable issue. Now that we have _more_ ram available, this is a good option to split power related items out into their own thread.
This commit is contained in:
@@ -244,8 +244,6 @@ void fusb_reset() {
|
|||||||
fusb_write_byte( FUSB_CONTROL0, 0x44);
|
fusb_write_byte( FUSB_CONTROL0, 0x44);
|
||||||
/* Flush the RX buffer */
|
/* Flush the RX buffer */
|
||||||
fusb_write_byte( FUSB_CONTROL1, FUSB_CONTROL1_RX_FLUSH);
|
fusb_write_byte( FUSB_CONTROL1, FUSB_CONTROL1_RX_FLUSH);
|
||||||
/* Reset the PD logic */
|
|
||||||
// fusb_write_byte( FUSB_RESET, FUSB_RESET_PD_RESET);
|
|
||||||
if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
|
if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
|
||||||
I2CBB::unlock2();
|
I2CBB::unlock2();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ void vApplicationStackOverflowHook(TaskHandle_t *pxTask,
|
|||||||
void startGUITask(void const *argument);
|
void startGUITask(void const *argument);
|
||||||
void startPIDTask(void const *argument);
|
void startPIDTask(void const *argument);
|
||||||
void startMOVTask(void const *argument);
|
void startMOVTask(void const *argument);
|
||||||
|
void startPOWTask(void const *argument);
|
||||||
extern TaskHandle_t pidTaskNotification;
|
extern TaskHandle_t pidTaskNotification;
|
||||||
extern uint8_t accelInit;
|
extern uint8_t accelInit;
|
||||||
extern TickType_t lastMovementTime;
|
extern TickType_t lastMovementTime;
|
||||||
|
|||||||
@@ -24,11 +24,17 @@ osThreadId PIDTaskHandle;
|
|||||||
static const size_t PIDTaskStackSize = 512 / 4;
|
static const size_t PIDTaskStackSize = 512 / 4;
|
||||||
uint32_t PIDTaskBuffer[PIDTaskStackSize];
|
uint32_t PIDTaskBuffer[PIDTaskStackSize];
|
||||||
osStaticThreadDef_t PIDTaskControlBlock;
|
osStaticThreadDef_t PIDTaskControlBlock;
|
||||||
|
|
||||||
osThreadId MOVTaskHandle;
|
osThreadId MOVTaskHandle;
|
||||||
static const size_t MOVTaskStackSize = 1024 / 4;
|
static const size_t MOVTaskStackSize = 1024 / 4;
|
||||||
uint32_t MOVTaskBuffer[MOVTaskStackSize];
|
uint32_t MOVTaskBuffer[MOVTaskStackSize];
|
||||||
osStaticThreadDef_t MOVTaskControlBlock;
|
osStaticThreadDef_t MOVTaskControlBlock;
|
||||||
|
|
||||||
|
osThreadId POWTaskHandle;
|
||||||
|
static const size_t POWTaskStackSize = 512 / 4;
|
||||||
|
uint32_t POWTaskBuffer[POWTaskStackSize];
|
||||||
|
osStaticThreadDef_t POWTaskControlBlock;
|
||||||
|
|
||||||
// End FreeRTOS
|
// End FreeRTOS
|
||||||
// Main sets up the hardware then hands over to the FreeRTOS kernel
|
// Main sets up the hardware then hands over to the FreeRTOS kernel
|
||||||
int main(void) {
|
int main(void) {
|
||||||
@@ -40,20 +46,21 @@ int main(void) {
|
|||||||
settingsWereReset = restoreSettings(); // load the settings from flash
|
settingsWereReset = restoreSettings(); // load the settings from flash
|
||||||
resetWatchdog();
|
resetWatchdog();
|
||||||
/* Create the thread(s) */
|
/* Create the thread(s) */
|
||||||
/* definition and creation of GUITask */
|
/* definition and creation of POWTask - Power management for QC */
|
||||||
osThreadStaticDef(GUITask, startGUITask, osPriorityBelowNormal, 0,
|
osThreadStaticDef(POWTask, startPOWTask, osPriorityAboveNormal, 0, POWTaskStackSize, POWTaskBuffer, &POWTaskControlBlock);
|
||||||
GUITaskStackSize, GUITaskBuffer, &GUITaskControlBlock);
|
POWTaskHandle = osThreadCreate(osThread(POWTask), NULL);
|
||||||
|
|
||||||
|
/* definition and creation of GUITask - The OLED control & update*/
|
||||||
|
osThreadStaticDef(GUITask, startGUITask, osPriorityBelowNormal, 0, GUITaskStackSize, GUITaskBuffer, &GUITaskControlBlock);
|
||||||
GUITaskHandle = osThreadCreate(osThread(GUITask), NULL);
|
GUITaskHandle = osThreadCreate(osThread(GUITask), NULL);
|
||||||
|
|
||||||
/* definition and creation of PIDTask */
|
/* definition and creation of PIDTask - Heating control*/
|
||||||
osThreadStaticDef(PIDTask, startPIDTask, osPriorityRealtime, 0,
|
osThreadStaticDef(PIDTask, startPIDTask, osPriorityRealtime, 0, PIDTaskStackSize, PIDTaskBuffer, &PIDTaskControlBlock);
|
||||||
PIDTaskStackSize, PIDTaskBuffer, &PIDTaskControlBlock);
|
|
||||||
PIDTaskHandle = osThreadCreate(osThread(PIDTask), NULL);
|
PIDTaskHandle = osThreadCreate(osThread(PIDTask), NULL);
|
||||||
|
|
||||||
osThreadStaticDef(MOVTask, startMOVTask, osPriorityNormal, 0,
|
/* definition and creation of MOVTask - Accelerometer management */
|
||||||
MOVTaskStackSize, MOVTaskBuffer, &MOVTaskControlBlock);
|
osThreadStaticDef(MOVTask, startMOVTask, osPriorityNormal, 0, MOVTaskStackSize, MOVTaskBuffer, &MOVTaskControlBlock);
|
||||||
MOVTaskHandle = osThreadCreate(osThread(MOVTask), NULL);
|
MOVTaskHandle = osThreadCreate(osThread(MOVTask), NULL);
|
||||||
|
|
||||||
resetWatchdog();
|
resetWatchdog();
|
||||||
|
|
||||||
/* Start scheduler */
|
/* Start scheduler */
|
||||||
|
|||||||
@@ -107,7 +107,6 @@ inline void readAccelerometer(int16_t &tx, int16_t &ty, int16_t &tz, Orientation
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
void startMOVTask(void const *argument __unused) {
|
void startMOVTask(void const *argument __unused) {
|
||||||
postRToSInit();
|
|
||||||
detectAccelerometerVersion();
|
detectAccelerometerVersion();
|
||||||
osDelay(TICKS_100MS / 2); // wait ~50ms for setup of accel to finalise
|
osDelay(TICKS_100MS / 2); // wait ~50ms for setup of accel to finalise
|
||||||
lastMovementTime = 0;
|
lastMovementTime = 0;
|
||||||
@@ -168,6 +167,5 @@ void startMOVTask(void const *argument __unused) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
osDelay(TICKS_100MS); // Slow down update rate
|
osDelay(TICKS_100MS); // Slow down update rate
|
||||||
power_check();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
27
workspace/TS100/Core/Threads/POWThread.cpp
Normal file
27
workspace/TS100/Core/Threads/POWThread.cpp
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* POWThread.cpp
|
||||||
|
*
|
||||||
|
* Created on: 16 Jan 2021
|
||||||
|
* Author: Ralim
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "BSP.h"
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "QC3.h"
|
||||||
|
#include "Settings.h"
|
||||||
|
#include "cmsis_os.h"
|
||||||
|
#include "main.hpp"
|
||||||
|
#include "stdlib.h"
|
||||||
|
#include "task.h"
|
||||||
|
|
||||||
|
// Small worker thread to handle power (mostly QC) related steps
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void startPOWTask(void const *argument __unused) {
|
||||||
|
postRToSInit();
|
||||||
|
for (;;) {
|
||||||
|
osDelay(TICKS_100MS); // Slow down update rate
|
||||||
|
power_check();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user