程序在运行到延时函数时会卡死,不知为什么,有时发生,有时不发生这种情况.(STC15F2K60S2+keil4)
时间:10-02
整理:3721RD
点击:
我一直使用STC系列单片机,现在发现个问题,关于延时函数的.
方式一:for(i=0;i<ms;i++).
方式二:for(i=ms;i>0;i--).
方式三:do{.....} while(--ms);
发现方式一在程序中很容易出现卡死的现象,方式二三基本不出现.但是有时也会卡死,不知在使用延时函数时有什么注意的没有?
程序结构如下:
1/各类函数声明及各种定义
2/主程序
3/声明函数
在主程序中一运行到延时函数,程序就走不动了.也搞不清为什么.
方式一:for(i=0;i<ms;i++).
方式二:for(i=ms;i>0;i--).
方式三:do{.....} while(--ms);
发现方式一在程序中很容易出现卡死的现象,方式二三基本不出现.但是有时也会卡死,不知在使用延时函数时有什么注意的没有?
程序结构如下:
1/各类函数声明及各种定义
2/主程序
3/声明函数
在主程序中一运行到延时函数,程序就走不动了.也搞不清为什么.
要防止溢出,unsigned char型不要大于255之类的。
使用过多款STC15系列单片机,包括STC15F2K60S2,没有遇到小编的问题,应该不是硬件毛病。
觉得应该是编程问题
重来没有遇到过,
因為 方式1 進行彙編語言解釋時多出4個指令 並且在 i<ms 處調用前部分的值進行轉跳
0會印發處理異常
建議改用 方式2 精簡指令 提升內存訪問的質量減少不確定型
這種情況多見於C編譯的指令執行效率和異常 彙編語句暫時還沒有發生
仿真一下 看看是不是內存溢出后丟失引發
方式一我一個師傅很久之前都不讓我用了,,當時他就給我解釋了這麼多 他是彙編 出身
谢谢啊,我试一下,我的程序写的比较长,CODE=17000,之前没有出现过,后来不知怎么就不行了,一到延时就卡死.而且我把程序功能减一减就又没有问题了,
十有八九小编ms用的16位而i用的8位,延时函数调用时ms给了个大于255的数据
没有遇到小编的问题
感谢大家关注,今天终于找到原因了,变量定义太多了,XDATA不能超过2000.也不知为什么.
