如果有挂起的切换,则不再切换。否则切换时需要保存的栈会出错。

解决不停创建、销毁线程时,内存暴涨不消的问题。这个问题估计跟没法完全释放线程有关
This commit is contained in:
Stone 2014-09-19 03:28:16 +00:00
parent 7172848991
commit 187b4d7a21
3 changed files with 15 additions and 4 deletions

View File

@ -26,7 +26,10 @@ void* operator new(uint size)
{
mem_printf("0x%08x ", p);
// 如果堆只剩下64字节则报告失败要求用户扩大堆空间以免不测
uint end = (uint)&__heap_limit;
//uint end = (uint)&__heap_limit;
//uint end = __get_PSP();
//if(!end) end = __get_MSP();
uint end = __get_MSP();
if((uint)p + size + 0x40 >= end) mem_printf(" + %d near HeapEnd=0x%08x", size, end);
}
assert_param(p);
@ -43,7 +46,10 @@ void* operator new[](uint size)
{
mem_printf("0x%08x ", p);
// 如果堆只剩下64字节则报告失败要求用户扩大堆空间以免不测
uint end = (uint)&__heap_limit;
//uint end = (uint)&__heap_limit;
//uint end = __get_PSP();
//if(!end) end = __get_MSP();
uint end = __get_MSP();
if((uint)p + size + 0x40 >= end) mem_printf(" + %d near HeapEnd=0x%08x", size, end);
}
assert_param(p);

2
Sys.h
View File

@ -151,7 +151,7 @@ __inline void debug_printf( const char *format, ... ) {}
#endif //_Sys_H_
/*
v2.6.2014.0919 线
v2.7.2014.0919 线
v2.6.2014.0823
v2.5.2014.0819 new/delete实现Debug有效
v2.4.2014.0811 4k

View File

@ -127,7 +127,7 @@ Thread::~Thread()
if(State != Stopped) Stop();
Stack = StackTop - (StackSize >> 2);
if(Stack) delete Stack;
if(Stack) delete[] Stack;
Stack = NULL;
StackTop = NULL;
}
@ -464,6 +464,9 @@ PendSV_NoSave // 此时整个上下文已经被保存
// 切换线程,马上切换时间片给下一个线程
void Thread::Switch()
{
// 如果有挂起的切换,则不再切换。否则切换时需要保存的栈会出错
if(SCB->ICSR & SCB_ICSR_PENDSVSET_Msk) return;
// 准备当前任务和新任务的栈
curStack = 0;
if(Current)
@ -549,6 +552,8 @@ void Thread::Init()
// 每个线程结束时执行该方法,销毁线程
void Thread::OnEnd()
{
SmartIRQ irq; // 关闭全局中断,确保销毁成功
Thread* th = Thread::Current;
if(th) delete th;
}