1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-19 14:25:11 +03:00

[ARM] Tasks stack class created

New taskinfo command added to the CLI. CLI stack size increased as it
was too short for the ls command (the CLI did hang!)
This commit is contained in:
Bertrand Songis 2015-09-05 11:10:18 +02:00
parent 2a2650376c
commit d14931f77f
10 changed files with 194 additions and 86 deletions

View file

@ -36,10 +36,10 @@
#include "opentx.h"
#define MENUS_STACK_SIZE 2000
#define MIXER_STACK_SIZE 500
#define AUDIO_STACK_SIZE 500
#define BT_STACK_SIZE 500
#define MENUS_STACK_SIZE 2000
#define MIXER_STACK_SIZE 500
#define AUDIO_STACK_SIZE 500
#define BLUETOOTH_STACK_SIZE 500
#if defined(_MSC_VER)
#define _ALIGNED(x) __declspec(align(x))
@ -48,73 +48,85 @@
#endif
OS_TID menusTaskId;
// stack must be aligned to 8 bytes otherwise printf for %f does not work!
OS_STK _ALIGNED(8) menusStack[MENUS_STACK_SIZE];
// menus stack must be aligned to 8 bytes otherwise printf for %f does not work!
TaskStack<MENUS_STACK_SIZE> _ALIGNED(8) menusStack;
OS_TID mixerTaskId;
OS_STK mixerStack[MIXER_STACK_SIZE];
TaskStack<MENUS_STACK_SIZE> mixerStack;
OS_TID audioTaskId;
OS_STK audioStack[AUDIO_STACK_SIZE];
TaskStack<AUDIO_STACK_SIZE> audioStack;
#if defined(BLUETOOTH)
OS_TID btTaskId;
OS_STK btStack[BT_STACK_SIZE];
TaskStack<BLUETOOTH_STACK_SIZE> bluetoothStack;
#endif
OS_MutexID audioMutex;
OS_MutexID mixerMutex;
void stack_paint()
enum TaskIndex {
MENU_TASK_INDEX,
MIXER_TASK_INDEX,
AUDIO_TASK_INDEX,
CLI_TASK_INDEX,
BLUETOOTH_TASK_INDEX,
TASK_INDEX_COUNT,
MAIN_TASK_INDEX = 255
};
template<int size>
void TaskStack<size>::paint()
{
for (uint32_t i=0; i<MENUS_STACK_SIZE; i++)
menusStack[i] = 0x55555555;
for (uint32_t i=0; i<MIXER_STACK_SIZE; i++)
mixerStack[i] = 0x55555555;
for (uint32_t i=0; i<AUDIO_STACK_SIZE; i++)
audioStack[i] = 0x55555555;
for (uint32_t i=0; i<size; i++) {
stack[i] = 0x55555555;
}
}
uint32_t stack_free(uint32_t tid)
template<int size>
uint32_t TaskStack<size>::getSize()
{
OS_STK *stack;
uint32_t size;
return size;
}
switch(tid) {
case 0:
stack = menusStack;
size = MENUS_STACK_SIZE;
break;
case 1:
stack = mixerStack;
size = MIXER_STACK_SIZE;
break;
case 2:
stack = audioStack;
size = AUDIO_STACK_SIZE;
break;
#if defined(PCBTARANIS)
case 255:
#if defined(SIMU)
return 1024;
#else
// main stack
stack = (OS_STK *)&_main_stack_start;
size = ((unsigned char *)&_estack - (unsigned char *)&_main_stack_start) / 4;
#endif
break;
#endif
default:
return 0;
uint32_t getStackAvailable(void * address, uint32_t size)
{
uint32_t * array = (uint32_t *)address;
uint32_t i = 0;
while (i < size && array[i] == 0x55555555) {
i++;
}
uint32_t i=0;
for (; i<size; i++)
if (stack[i] != 0x55555555)
break;
return i*4;
}
template<int size>
uint32_t TaskStack<size>::available()
{
return getStackAvailable(stack, size);
}
void stackPaint()
{
menusStack.paint();
mixerStack.paint();
audioStack.paint();
#if defined(CLI)
cliStack.paint();
#endif
}
#if defined(CPUSTM32)
uint32_t mainStackSize()
{
return ((unsigned char *)&_estack - (unsigned char *)&_main_stack_start) / 4;
}
uint32_t mainStackAvailable()
{
return getStackAvailable(&_main_stack_start, mainStackSize());
}
#endif
#if !defined(SIMU)
void mixerTask(void * pdata)
@ -176,7 +188,7 @@ void menusTask(void * pdata)
}
}
#if defined(REV9E)
#if defined(PCBTARANIS) && defined(REV9E)
topLcdOff();
#endif
@ -204,12 +216,12 @@ void tasksStart()
#endif
#if defined(BLUETOOTH)
btTaskId = CoCreateTask(btTask, NULL, 15, &btStack[BT_STACK_SIZE-1], BT_STACK_SIZE);
btTaskId = CoCreateTask(btTask, NULL, 15, &bluetoothStack[BLUETOOTH_STACK_SIZE-1], BLUETOOTH_STACK_SIZE);
#endif
mixerTaskId = CoCreateTask(mixerTask, NULL, 5, &mixerStack[MIXER_STACK_SIZE-1], MIXER_STACK_SIZE);
menusTaskId = CoCreateTask(menusTask, NULL, 10, &menusStack[MENUS_STACK_SIZE-1], MENUS_STACK_SIZE);
audioTaskId = CoCreateTask(audioTask, NULL, 7, &audioStack[AUDIO_STACK_SIZE-1], AUDIO_STACK_SIZE);
mixerTaskId = CoCreateTask(mixerTask, NULL, 5, &mixerStack.stack[MIXER_STACK_SIZE-1], MIXER_STACK_SIZE);
menusTaskId = CoCreateTask(menusTask, NULL, 10, &menusStack.stack[MENUS_STACK_SIZE-1], MENUS_STACK_SIZE);
audioTaskId = CoCreateTask(audioTask, NULL, 7, &audioStack.stack[AUDIO_STACK_SIZE-1], AUDIO_STACK_SIZE);
#if !defined(SIMU)
audioMutex = CoCreateMutex();