原理:在栈哪里先写特定的值,以一定间隔去监测特定值是否存在。
float CortexM_StackCheck(void)
{
static int IsFirstCheck = 1;
uint32_t i;
TempStartAddr = ((uint32_t)Stack_Mem);
TempStackSize = ((uint32_t)Stack_Size);
//µÚÒ»´ÎÖ´Ðд˺¯Êý.
//¼ì²é´Ëʱ´Ë¿ÌÊÇ·ñÕ»Òç³ö,²¢ÔÚÕ»µ×É趨¼ì²é±êÖ¾.
if(0 != IsFirstCheck)
{
//ÓÐ×ã¹»µÄ¿Õ¼äÓÃÓÚÌîÈë¼ì²éÓõÄÊý¾Ý.
for(i=0; i<TempStackSize/4; i+=4)
{
//ÌîÈëÊý¾Ý
*((uint32_t*)Stack_Mem + i) = CheckKey;
}
//±ê¼ÇÒѾÌîÈëÁËÊý¾Ý,ÒÔºó¾Í²»À´ÕâÀïÍæÁË.
IsFirstCheck = 0;
//OK
return 0;
}
else //Ç°ÃæÒѾÂñÏÂÁ˺ö«Î÷,¿´¿´»¹ÔÚ²»ÔÚ...
{
for(i=0; i<TempStackSize/4; i+=4)
{
if(CheckKey != *((uint32_t*)Stack_Mem + i))
break;
}
}
TempStackUsed = (TempStackSize - (i*4))/1024.0f;
return TempStackUsed;
}