OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11317|回复: 8

SysTick延时程序可以在中断中使用吗?

[复制链接]

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2011-7-28
在线时间
2 小时
发表于 2011-12-19 14:16:20 | 显示全部楼层 |阅读模式
SysTick是硬件实现的
硬件就一个,如果主程序正在使用SysTick延时,中断嵌套进入后又调用是不是会出错的?
至少中断返回后SysTick的状态是不是已经不对了?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-12-19 15:46:39 | 显示全部楼层
回复【楼主位】ludl:
---------------------------------
1,延时我们不是用中断做的.如果中断打断SYSTICK的话,肯定就会导致延时有小小的不准了,这就是为什么要求中断函数要越精简越好了.
2,SYSTICK的优先级很高(当然比系统复位要低),你的什么外部中断,内部中断,基本都无法打断SYSTICK中断.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2011-7-28
在线时间
2 小时
 楼主| 发表于 2011-12-20 09:51:13 | 显示全部楼层
谢谢
不过我的意思是可不可以在中断程序中调用这个systick延时程序?
比如中断中的按键消抖延时
如果主程序此时运行的也是systick延时,那是不是会有问题?
我目前的情况是程序进入了systick延时后死在里面不出来了

有时又会进入HardFault_Handler里的死循环
进HardFault_Handler里的死循环好像和我新定义了几个几百个字节的大数组有关,但具体还没搞清楚.
顺便问一下
怎样定义常数数组,数组保存在code区?
我加了const好像数组地址还是在ram里,0x20开头. 进code了的话应该是0x08开头吧
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-12-21 00:37:16 | 显示全部楼层
可以的。我们的代码就有这么用。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-12-21 00:38:38 | 显示全部楼层
const是定义flash区的。是不是你查看错了?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2011-7-28
在线时间
2 小时
 楼主| 发表于 2011-12-21 09:46:17 | 显示全部楼层
回复【5楼】正点原子:

---------------------------------
const的问题已经弄好了
进code 的一定要是全局量,定义在局部只能是在ram里
可能是因为用code区的就无所谓局部了,肯定是一直存在的,既然要定义局部量,用完要释放空间就只能是在ram里

但为了程序的可读性和可移植性,我觉得这有点不合理,但也没办法.
回复 支持 反对

使用道具 举报

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2011-7-28
在线时间
2 小时
 楼主| 发表于 2011-12-21 09:50:15 | 显示全部楼层
我把几个大的常量表定义到code区后好像进HardFault的情况就没有了
之前会不会是堆栈溢出?
堆栈大小哪里可以调整吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-12-21 10:03:01 | 显示全部楼层
在.s文件里面。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

17

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2015-10-22
在线时间
95 小时
发表于 2016-4-13 18:29:38 | 显示全部楼层
ludl 发表于 2011-12-20 09:51
谢谢
不过我的意思是可不可以在中断程序中调用这个systick延时程序?
比如中断中的按键消抖延时
如果主程序 ...

你好,我也遇到这个问题,我需要一个很大的数组,一秒钟一个数据,测量时间可能24小时,或者48小时,我设置很大的时候也会进入HardFault_Handler死循环,设置小一点就没事,请问你是怎么处理这个问题的?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 15:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表