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:
parent
2a2650376c
commit
d14931f77f
10 changed files with 194 additions and 86 deletions
|
@ -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();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue