专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
TI
同一个函数,为什么多次调用,堆栈越用越大?
2019-08-03 14:51
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
11667
2
1004
单片机是MSP430,开发环境是IAR。
一个函数,函数里面没有使用静态变量,多次调用,堆栈一直在增加?
不是应该每次调用后堆栈就释放了么?为什么还会在前一次的基础上增加呢?
求解惑。。
代码见二楼,
我单独把这个函数提出来多次调用运行,结果如下图,(其中unsigned char GUI_Buffer[12]) :
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
motoedy
1楼-- · 2019-08-03 15:56
/*******************************************
函数名称:Numtostr
功 能:任意数转字符串
参 数:fNum:要显示的数字
pBuf:保存的字符串数组
nSize:最大显示长度
Point_bit:小数点位数
返回值 :无
********************************************/
void Numtostr(unsigned char *pBuf, unsigned char nSize, float fNum,unsigned char Point_bit )
{
unsigned char i=0;
unsigned char cursor = 0 ;
long fNum_temp = 0 ;
unsigned char Start_Addr=0; //起始地址
if(Point_bit!=0)
{
float temp=5; //四舍五入补偿
for(i=(Point_bit+1);i>0;i--)
{
temp/=10;
}
if(fNum > 0) //正数
{
fNum+=temp;
}
else if(fNum < 0) //负数
{
fNum-=temp;
}
}
if (fNum < 0) //如果是负数先转换为正数,添加负号
{
fNum = 0 - fNum ;
pBuf[cursor++]= '-';
Start_Addr=1;
}
fNum_temp = (long)fNum ; //获取整数
if(fNum_temp>=1) //1以上的
{
while (fNum_temp) //取整数各位
{
pBuf[cursor++] = (fNum_temp%10)+'0';
fNum_temp /= 10 ;
}
char c ;
for(i=Start_Addr; i<((cursor+Start_Addr)/2);i++)//转换高低位
{
c = pBuf[i];
pBuf[i] = pBuf[cursor-1-(i-Start_Addr)];
pBuf[cursor-1-(i-Start_Addr)] = c ;
}
}
else //0.xxxxx的
{
pBuf[cursor++]='0'; //第一位为0
}
if((cursor+1)>=nSize) //如果超过显示位数或整数位+1等于最大显示位
{
pBuf[cursor] = ' ' ; //小数点不显示,即整数
}
else
{
if(Point_bit!=0)
{
pBuf[cursor++] = '.' ; //显示小数点
fNum =fNum-(long)fNum; //得到小数部分
i = nSize-cursor ;
Point_bit =((char)Point_bit - (char)i) > 0 ? i : Point_bit;
while (Point_bit) //获取小数,
{
fNum *= 10 ;
pBuf[cursor++] = (unsigned char)fNum+'0';//得到小数各位
Point_bit-- ;
fNum -=(float)((unsigned char)fNum);
}
}
pBuf[cursor] = ' ' ; //结束标识符 ;
}
pBuf[nSize] = ' ' ; //结束标识符
}
复制代码
加载中...
茫茫大士
2楼-- · 2019-08-03 18:45
精彩回答 2 元偷偷看……
加载中...
一周热门
更多
>
相关问题
CPLD的方波输出
4 个回答
11个版本Quartus II 软件下载,安装包网盘合集,附教程,47G!
20 个回答
请大家帮忙到21IC发展大家谈支持我申请新版面
20 个回答
【通知】21ic中国电子网服务条款 (所有人员必读)
1 个回答
满载而归乙亥年,大展鸿途庚子年---集签赢好礼
20 个回答
携手ADI,踏上电子工程师之巅—车辆电气化视频,答题领奖!
1 个回答
如何提升论坛质量,看你了!
20 个回答
【最终名单】二姨家喊你来拿100份新年大礼啦~
20 个回答
相关文章
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
TI
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- /*******************************************
- 函数名称:Numtostr
- 功 能:任意数转字符串
- 参 数:fNum:要显示的数字
- pBuf:保存的字符串数组
- nSize:最大显示长度
- Point_bit:小数点位数
- 返回值 :无
- ********************************************/
- void Numtostr(unsigned char *pBuf, unsigned char nSize, float fNum,unsigned char Point_bit )
- {
- unsigned char i=0;
- unsigned char cursor = 0 ;
- long fNum_temp = 0 ;
- unsigned char Start_Addr=0; //起始地址
-
- if(Point_bit!=0)
- {
- float temp=5; //四舍五入补偿
- for(i=(Point_bit+1);i>0;i--)
- {
- temp/=10;
- }
- if(fNum > 0) //正数
- {
- fNum+=temp;
- }
- else if(fNum < 0) //负数
- {
- fNum-=temp;
- }
- }
-
- if (fNum < 0) //如果是负数先转换为正数,添加负号
- {
- fNum = 0 - fNum ;
- pBuf[cursor++]= '-';
- Start_Addr=1;
- }
-
- fNum_temp = (long)fNum ; //获取整数
-
- if(fNum_temp>=1) //1以上的
- {
- while (fNum_temp) //取整数各位
- {
- pBuf[cursor++] = (fNum_temp%10)+'0';
- fNum_temp /= 10 ;
- }
-
- char c ;
-
- for(i=Start_Addr; i<((cursor+Start_Addr)/2);i++)//转换高低位
- {
- c = pBuf[i];
- pBuf[i] = pBuf[cursor-1-(i-Start_Addr)];
- pBuf[cursor-1-(i-Start_Addr)] = c ;
- }
- }
- else //0.xxxxx的
- {
- pBuf[cursor++]='0'; //第一位为0
- }
- if((cursor+1)>=nSize) //如果超过显示位数或整数位+1等于最大显示位
- {
- pBuf[cursor] = ' ' ; //小数点不显示,即整数
- }
- else
- {
- if(Point_bit!=0)
- {
- pBuf[cursor++] = '.' ; //显示小数点
-
- fNum =fNum-(long)fNum; //得到小数部分
-
- i = nSize-cursor ;
-
- Point_bit =((char)Point_bit - (char)i) > 0 ? i : Point_bit;
- while (Point_bit) //获取小数,
- {
- fNum *= 10 ;
- pBuf[cursor++] = (unsigned char)fNum+'0';//得到小数各位
-
- Point_bit-- ;
-
- fNum -=(float)((unsigned char)fNum);
- }
- }
- pBuf[cursor] = ' ' ; //结束标识符 ;
- }
- pBuf[nSize] = ' ' ; //结束标识符
- }
复制代码一周热门 更多>