Merge pull request #2101 from opentx/projectkk2glider/ram_savings

Projectkk2glider/ram savings
This commit is contained in:
Bertrand Songis
2015-02-20 21:24:07 +01:00
10 changed files with 44 additions and 16 deletions
+5 -3
View File
@@ -149,12 +149,14 @@ void menuStatisticsDebug(uint8_t event)
lcd_puts(lcdLastPos, MENU_DEBUG_Y_MIXMAX, "ms");
lcd_putsLeft(MENU_DEBUG_Y_RTOS, STR_FREESTACKMINB);
lcd_putsAtt(MENU_DEBUG_COL1_OFS, MENU_DEBUG_Y_RTOS+1, "[Main]", SMLSIZE);
lcd_putsAtt(MENU_DEBUG_COL1_OFS, MENU_DEBUG_Y_RTOS+1, "[M]", SMLSIZE);
lcd_outdezAtt(lcdLastPos, MENU_DEBUG_Y_RTOS, stack_free(0), UNSIGN|LEFT);
lcd_putsAtt(lcdLastPos+2, MENU_DEBUG_Y_RTOS+1, "[Mix]", SMLSIZE);
lcd_putsAtt(lcdLastPos+2, MENU_DEBUG_Y_RTOS+1, "[X]", SMLSIZE);
lcd_outdezAtt(lcdLastPos, MENU_DEBUG_Y_RTOS, stack_free(1), UNSIGN|LEFT);
lcd_putsAtt(lcdLastPos+2, MENU_DEBUG_Y_RTOS+1, "[Audio]", SMLSIZE);
lcd_putsAtt(lcdLastPos+2, MENU_DEBUG_Y_RTOS+1, "[A]", SMLSIZE);
lcd_outdezAtt(lcdLastPos, MENU_DEBUG_Y_RTOS, stack_free(2), UNSIGN|LEFT);
lcd_putsAtt(lcdLastPos+2, MENU_DEBUG_Y_RTOS+1, "[I]", SMLSIZE);
lcd_outdezAtt(lcdLastPos, MENU_DEBUG_Y_RTOS, stack_free(255), UNSIGN|LEFT);
lcd_puts(3*FW, 7*FH+1, STR_MENUTORESET);
lcd_status_line();
+2 -1
View File
@@ -720,7 +720,7 @@ extern uint8_t flightModeTransitionLast;
extern int _end;
extern int _estack;
extern int _main_stack_start;
#define getAvailableMemory() ((unsigned int)((unsigned char *)&_estack - heap))
#define getAvailableMemory() ((unsigned int)((unsigned char *)&_main_stack_start - heap))
#endif
void evalFlightModeMixes(uint8_t mode, uint8_t tick10ms);
@@ -940,6 +940,7 @@ extern uint16_t lastMixerDuration;
#if defined(CPUARM)
uint32_t stack_free(uint32_t tid);
void stack_paint();
#else
uint16_t stack_free();
#endif
+1 -1
View File
@@ -38,7 +38,7 @@
uint8_t s_pulses_paused = 0;
uint8_t s_current_protocol[NUM_MODULES] = { MODULES_INIT(255) };
uint32_t failsafeCounter[NUM_MODULES] = { MODULES_INIT(100) };
uint16_t failsafeCounter[NUM_MODULES] = { MODULES_INIT(100) };
uint8_t moduleFlag[NUM_MODULES] = { 0 };
void setupPulses(unsigned int port)
+1 -1
View File
@@ -45,7 +45,7 @@
extern uint8_t s_current_protocol[NUM_MODULES];
extern uint8_t s_pulses_paused;
extern uint32_t failsafeCounter[NUM_MODULES];
extern uint16_t failsafeCounter[NUM_MODULES];
void setupPulses(unsigned int port);
void setupPulsesDSM2(unsigned int port);
+4
View File
@@ -313,6 +313,10 @@ void *main_thread(void *)
try {
#endif
#if defined(CPUARM)
stack_paint();
#endif
s_current_protocol[0] = 255;
g_menuStackPtr = 0;
+3 -5
View File
@@ -53,10 +53,8 @@
#undef errno
extern int errno;
extern int _end;
extern int _estack;
#define RAM_END (unsigned char *)&_estack
extern int _end;
extern int _main_stack_start;
/*----------------------------------------------------------------------------
* Exported functions
@@ -68,7 +66,7 @@ extern int _getpid ( void ) ;
unsigned char *heap = (unsigned char *)&_end;
extern caddr_t _sbrk(int nbytes)
{
if (heap + nbytes < RAM_END-4096) {
if (heap + nbytes < (unsigned char *)&_main_stack_start) {
unsigned char *prev_heap = heap;
heap += nbytes;
return (caddr_t) prev_heap;
@@ -98,10 +98,23 @@ LoopFillZerobss:
ldr r3, = _ebss
cmp r2, r3
bcc FillZerobss
/*Paint Main Stack */
ldr r2, = _main_stack_start
PaintMainStack:
movs r3, #0x55555555
str r3, [r2], #4
LoopPaintMainStack:
ldr r3, = _estack
cmp r2, r3
bcc PaintMainStack
/* Call the clock system intitialization function.*/
bl SystemInit
/* Call C++ constructors for static objects */
bl __libc_init_array
/* Call the application's entry point.*/
bl main
bx lr
+5 -2
View File
@@ -37,7 +37,10 @@ _estack = 0x20020000; /* end of 128K SRAM */
/* Generate a link error if heap and stack don't fit into RAM */
_Min_Heap_Size = 0; /* required amount of heap */
_Min_Stack_Size = 0x200; /* required amount of stack */
_Main_Stack_Size = 1024; /* required amount of stack for interrupt stack (Main stack) */
/*Main stack end*/
_main_stack_start = _estack - _Main_Stack_Size;
/* Specify the memory areas */
MEMORY
@@ -150,7 +153,7 @@ SECTIONS
{
. = ALIGN(4);
. = . + _Min_Heap_Size;
. = . + _Min_Stack_Size;
. = . + _Main_Stack_Size;
. = ALIGN(4);
} >RAM
+5 -2
View File
@@ -24,7 +24,10 @@ _estack = 0x20020000; /* end of 128K SRAM */
/* Generate a link error if heap and stack don't fit into RAM */
_Min_Heap_Size = 0; /* required amount of heap */
_Min_Stack_Size = 0x200; /* required amount of stack */
_Main_Stack_Size = 1024; /* required amount of stack for interrupt stack (Main stack) */
/*Main stack end*/
_main_stack_start = _estack - _Main_Stack_Size;
/* Specify the memory areas */
MEMORY
@@ -129,7 +132,7 @@ SECTIONS
{
. = ALIGN(4);
. = . + _Min_Heap_Size;
. = . + _Min_Stack_Size;
. = . + _Main_Stack_Size;
. = ALIGN(4);
} >RAM
+5 -1
View File
@@ -99,11 +99,15 @@ uint32_t stack_free(uint32_t tid)
stack = audioStack;
size = AUDIO_STACK_SIZE;
break;
#if 0 // defined(PCBTARANIS) && !defined(SIMU)
#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: