打印
[STM8]

STM8S Stack overflow

[复制链接]
1745|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在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 (43.94 KB )

新建 文本文档.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 (32.88 KB )

IAR setting.jpg

使用特权

评论回复
5
sjnh| | 2015-2-3 16:08 | 只看该作者
提示是stack的原因,楼上也给你贴出图片了;
估计你的定义是在函数内部,占用stack空间,同样的数组大小char/float占用空间是4倍关系;

使用特权

评论回复
6
s_f_tan| | 2015-2-4 11:20 | 只看该作者
float 是4B,char 是1B ,大小差4倍。函数内部自动变量都是在statck上分配的,你这个数组的大小超出statck了

使用特权

评论回复
7
xjjspace| | 2015-2-4 11:36 | 只看该作者
Nino0713 发表于 2015-2-3 15:14
資料我都找過了,設置上也沒有問題我是用IAR,
初步懷疑是暫存器設定可能有問題->
float Breath_Buf[2][LIG ...

你的设置没问题;
二维数组是可以声明为float类型的;
出现Stack overflow是因为在float类型下的这个二维数组占用空间过大,导致越界。
从满足程序要求和优化内存使用的角度上来说,能用uchar类型表示的,就不要用float啦。

使用特权

评论回复
8
Nino0713|  楼主 | 2015-2-4 13:45 | 只看该作者
xjjspace,


但沒辦法,我必須用這麼大的浮點數組去接計算出來的值,有其他辦法嗎?

使用特权

评论回复
9
s_f_tan| | 2015-2-5 10:34 | 只看该作者
你要看下你的芯片的ram资源能不能满足你的要求呀,你在iar中调节一下stack大小,看能不能编译出来

未命名.JPG (26.84 KB )

未命名.JPG

使用特权

评论回复
10
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也沒超出範圍

使用特权

评论回复
11
Nino0713|  楼主 | 2015-2-5 13:59 | 只看该作者
找到問題了,我在Write flash function前面加了__ramfunc↓
__ramfunc void Write_FlashBlock()

導致程序跑到RAM裡執行,難怪會一直Stack overflow, 是小弟的失誤,也謝謝大家的指教^^

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

20

帖子

0

粉丝