2634|5

200

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

有debug Systick实验想到的 [复制链接]

本帖最后由 leo121 于 2014-4-3 21:48 编辑

做过SysTick实验的朋友应该有印象,在调用delay()函数的时候,程序执行结束之后,并没有直接返回调用它的函数,而是跳转到SysTick_Handler(void),这是个很奇怪的事情,在c语言里都是函数调用完毕就返回,即使不返回也会显式调用其他函数,但是恰恰在delay()函数里没有(至于是哪个函数执行的跳转,我们这里暂时不讨论了)这就有点意思了,我由此胡思乱想到,这有点高级语言的味道了,那么我们在高级语言设计里经常会碰到button_click()事件,即鼠标或键盘点击按钮就会触发一个事件,而我们使用的大多数的开发板都会有User Button这个是物理的按钮,那么是不是也可以实现触动这个按钮就触发一个事件呢,实现这个就必须有个函数(线程)来监控按钮状态,那么我就是在想是不是可以实现这个想法呢?欢迎一起探讨!


调试环境 keil
硬件 STM32F407 Discovery
此帖出自stm32/stm8论坛

最新回复

我还以为是什么= =  详情 回复 发表于 2014-4-7 20:48
点赞 关注
 

回复
举报

603

帖子

1

TA的资源

纯净的硅(中级)

沙发
 


说实话读你写的内容有些吃力,然后运行了下(我的是429i的)相应例程,没有感觉到你所说的“执行结束之后,并没有直接返回,而是跳转到SysTick_Handler(void)”,

不知道是不是我们理解上有偏差。

我的例程里,delay只是把一个静态变量初始为指定的值,然后等着它变为0;另一边是Tick,不断将这个值减一。
此帖出自stm32/stm8论坛
 
 

回复

200

帖子

1

TA的资源

一粒金砂(中级)

板凳
 
本帖最后由 leo121 于 2014-4-3 21:51 编辑

可能是我写的比较乱,你理解的正确。
我附上我的delay()函数代码,看看和你的有区别么

void Delay(__IO u32 nTime)
{
        TimingDelay = nTime;        //TimingDelay是定义好的静态变量

         
        SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;

        while(TimingDelay != 0){
                ;}
}

我上面的代码执行完要跳转到SysTick_Handler(void)函数,这个函数在stm32f4xx_it.c里

你可以把SysTick_Handler(void)函数里的代码注释掉试试就知道了,你会进入死循环,不会跳出delay()这个函数的
此帖出自stm32/stm8论坛

点评

应该是没有区别。 这个东西……额,小伙伴,你怎么理解的? 这不是个很奇怪的事情。通常,我们称呼这个行为叫做中断, 中断的任务就是暂停当前程序的运行,转而执行相应的中断处理函数。 S  详情 回复 发表于 2014-4-4 07:39
 
 

回复

603

帖子

1

TA的资源

纯净的硅(中级)

4
 
leo121 发表于 2014-4-3 21:42
可能是我写的比较乱,你理解的正确。
我附上我的delay()函数代码,看看和你的有区别么


应该是没有区别。

这个东西……额,小伙伴,你怎么理解的?

这不是个很奇怪的事情。通常,我们称呼这个行为叫做中断,


中断的任务就是暂停当前程序的运行,转而执行相应的中断处理函数。


SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk
这句话的作用就是打开SysTick功能,这样每隔设定的时间,就会触发SysTick中断,就会处理SysTick_Handler(void)函数中的内容。


如果你只是刚刚学完C语言,刚刚开始接触嵌入式相关的学习,那你一定会对这个东西感到不解。
在大学课程中,最早理解这个概念的课程,好像是接口技术吧


此帖出自stm32/stm8论坛
 
 
 

回复

200

帖子

1

TA的资源

一粒金砂(中级)

5
 
谢谢,我还真是不了解那个就是中断,找时间补习一下中断方面的知识。
此帖出自stm32/stm8论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(中级)

6
 
我还以为是什么= =
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表