Keil C51 中堆栈指针的问题

KeilC51单片机程序.因为我的程序中做了一些抗干扰措施,当程序非正常跳转,如受干扰跑飞了,我会让程序跳转到主程序起始处(堆栈指针在之前已经由编译器初始化),那跳转到这... Keil C51 单片机程序.
因为 我的程序中做了一些抗干扰措施,当程序非正常跳转,如受干扰跑飞了,我会让程序跳转到主程序起始处(堆栈指针在之前已经由编译器初始化),那跳转到这里的时候,堆栈指针可能已经不一样了,我就想在这里加一条堆栈初始化指令,那么在这里 用什么语句怎么获得编译器生成的堆栈指针初始化值呢?
因为如果不这样,需要人工查看的话,很麻烦啊,再有就是增加了全局变量,堆栈指针初始化值也会变化的,一旦改程序但是忘记人工修改堆栈指针就会出问题啊.
To wuqing811 : 用看门狗了啊,但是有些情况下,程序会跑飞到一些关键程序处,比如 写EEPROM程序处,一旦错误写EEPROM将造成存储数据的丢失或者错误啊.
有些情况下,跑飞了,但是它后续还会执行喂狗程序,造成不复位啊.比如 主函数 循环依次调用 FuncA(), FuncB() FuncC() FeedWDG()[喂狗] 如果在执行FuncA()时跑飞到了FuncB()中呢?后续会照样喂狗啊!

To happycxz: 请教一下,看门狗复位 它会重新初始化堆栈指针吗?
展开
 我来答
百度网友0ad5d59
2009-01-14 · TA获得超过1192个赞
知道小有建树答主
回答量:378
采纳率:0%
帮助的人:567万
展开全部
看门狗足够了.
,???????看门狗复位 它会重新初始化堆栈指针
这个问题问得....艾.
上面都写着是复位了,,,就是代码从最开始的地方运行了.
堆栈肯定初始化掉了..
???比如 写EEPROM程序处,一旦错误写EEPROM将造成存储数据的丢失或者错误啊.
所以必须.有数据检验功能,,eeprom是不可靠的,
不跳飞都可能出错,不要说跳飞了.
???/FuncA(), FuncB() FuncC() FeedWDG()[喂狗] 如果在执行FuncA()时跑飞到了FuncB()中呢?后续会照样喂狗啊!
如果这种问题出现..就是funca没有正常退出,
跑到funcb里面也不会正常退出,,很可能的情况就是推出到非法地址.
这样,看门狗自然还会复位的..放心好了.

另为.给你个建议,,,都用了c写程序,,就不要过多的考虑堆栈什么的.
一般来说.这种系统都会给你自动搞定,,除非你想特殊应用,
自己手动操作堆栈...,虽然也可以.但是调试时候麻烦多多,非常容易出错,
要想这么做..必须充分了解C编译器编译的调用结构,堆栈使用方式等等,
happycxz
2009-01-13 · TA获得超过3146个赞
知道大有可为答主
回答量:3121
采纳率:0%
帮助的人:1611万
展开全部
用看门狗吧。有些看门狗可以强行复位的。真的不行,可以在你需要的地方加上:
对看门狗进行极短时间的初始化,然后延时超过这个极短时间,这样系统也就复位了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蓝色草原
2009-01-13 · TA获得超过1564个赞
知道大有可为答主
回答量:2294
采纳率:0%
帮助的人:1325万
展开全部
我觉得你的方法有问题,防止程序跑飞,用watchdog就可以。
不然你不知道程序飞到哪了,你怎么让程序跳转到主程序呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
伊·梵beec
2009-01-13 · TA获得超过2158个赞
知道大有可为答主
回答量:1897
采纳率:0%
帮助的人:1367万
展开全部
程序异常,你直接将它关闭,重新运行不就可以了吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式