[STM8] STM8S Stack overflow

[复制链接]
2070|10
 楼主| Nino0713 发表于 2015-2-3 09:50 | 显示全部楼层 |阅读模式
在Debug IAP的時候,使用UART傳送128byte, 直接寫入應用程序位置, 每次執行到一半都會出現Stack warning-iar stack pointer outside stack range, 然後程序就不正常動作了, 請求各位大大幫助!!
mmuuss586 发表于 2015-2-3 12:26 | 显示全部楼层

是不是哪里设置有问题;
比如选的芯片不对;

下载一个别人的例程试下,ST版块也有不少STM8的资料,自己找下;
s_f_tan 发表于 2015-2-3 14:21 | 显示全部楼层
stack 设的太小了,根据芯片把Ram大小调整
新建 文本文档.JPG
 楼主| Nino0713 发表于 2015-2-3 15:14 | 显示全部楼层
資料我都找過了,設置上也沒有問題我是用IAR,
初步懷疑是暫存器設定可能有問題->
float Breath_Buf[2][LIGHT_PER_LED*3]={0};
我把宣告型態改為char就可以了.
unsigned char Breath_Buf[2][LIGHT_PER_LED*3]={0};
二維振烈不能宣告float?

IAR setting.jpg
sjnh 发表于 2015-2-3 16:08 | 显示全部楼层
提示是stack的原因,楼上也给你贴出图片了;
估计你的定义是在函数内部,占用stack空间,同样的数组大小char/float占用空间是4倍关系;
s_f_tan 发表于 2015-2-4 11:20 | 显示全部楼层
float 是4B,char 是1B ,大小差4倍。函数内部自动变量都是在statck上分配的,你这个数组的大小超出statck了
xjjspace 发表于 2015-2-4 11:36 | 显示全部楼层
Nino0713 发表于 2015-2-3 15:14
資料我都找過了,設置上也沒有問題我是用IAR,
初步懷疑是暫存器設定可能有問題->
float Breath_Buf[2][LIG ...

你的设置没问题;
二维数组是可以声明为float类型的;
出现Stack overflow是因为在float类型下的这个二维数组占用空间过大,导致越界。
从满足程序要求和优化内存使用的角度上来说,能用uchar类型表示的,就不要用float啦。
 楼主| Nino0713 发表于 2015-2-4 13:45 | 显示全部楼层
xjjspace,


但沒辦法,我必須用這麼大的浮點數組去接計算出來的值,有其他辦法嗎?
s_f_tan 发表于 2015-2-5 10:34 | 显示全部楼层
你要看下你的芯片的ram资源能不能满足你的要求呀,你在iar中调节一下stack大小,看能不能编译出来
未命名.JPG
 楼主| Nino0713 发表于 2015-2-5 13:22 | 显示全部楼层
現在問題是為什麼我執行其他功能程序都正常,只有在執行IAP的時候才會出現Stack overflow
Debug Log->The stack pointer for stack 'Stack' (currently 0x0017FF) is outside the stack range (0x000F00 to 0x001000)

我的RAM也沒超出範圍
 楼主| Nino0713 发表于 2015-2-5 13:59 | 显示全部楼层
找到問題了,我在Write flash function前面加了__ramfunc↓
__ramfunc void Write_FlashBlock()

導致程序跑到RAM裡執行,難怪會一直Stack overflow, 是小弟的失誤,也謝謝大家的指教^^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

20

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部