请选择 进入手机版 | 继续访问电脑版

安富莱电子论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 88|回复: 8
收起左侧

[RL-RTX] 如何在系统节拍中断函数中加入自己的代码

[复制链接]

1

主题

4

帖子

6

积分

新手上路

积分
6
发表于 2019-2-5 13:33:28 | 显示全部楼层 |阅读模式
     大家新年好,今天大年初一我有个问题想要请教一下,目前我在使用KEIL自带的RTX操作系统,处理器用的是STM32F0,操作系统用的是滴答定时器现在我想在滴答定时器中断函数中加入一些自己的代码,但不知道这个中断函数到底在哪?还有就是这个系统定时器的中断优先级是多少?该如何设置?
回复

使用道具 举报

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42666
QQ
发表于 2019-2-5 15:03:46 | 显示全部楼层
1.  HAL_CMx.c
2.  RT_HAL_CM.H
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

19

主题

1208

帖子

1246

积分

至尊会员

积分
1246
发表于 2019-2-5 15:10:13 | 显示全部楼层
这个优先级默认是最低优先级,设置的话好像在HAL_CMX.C
回复

使用道具 举报

1

主题

4

帖子

6

积分

新手上路

积分
6
 楼主| 发表于 2019-2-5 15:25:27 | 显示全部楼层
eric2013 发表于 2019-2-5 15:03
1.  HAL_CMx.c
2.  RT_HAL_CM.H

我用的是M0+KEIL4.74,用的是自带内核并不是移植的源码,然后KEIL的RTX目录下只有HAL_CM1/3/4.c和RT_HAL_CM.h,并没有HAL_CM0.c,不过我测试了RTX创建的任务都可以正常运行,然后需要将这两个文件复制到自己的工程目录下吗?然后任务节拍定时器代码是不是汇编写的?
回复

使用道具 举报

1

主题

4

帖子

6

积分

新手上路

积分
6
 楼主| 发表于 2019-2-5 15:27:12 | 显示全部楼层
sanit 发表于 2019-2-5 15:10
这个优先级默认是最低优先级,设置的话好像在HAL_CMX.C

我用的是M0,KEIL目录下并没有HAL_CM0.c这个文件,不过目前任务都可以正常运行。
回复

使用道具 举报

5275

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
42666
QQ
发表于 2019-2-8 10:39:08 | 显示全部楼层
gongkongzidongh 发表于 2019-2-5 15:25
我用的是M0+KEIL4.74,用的是自带内核并不是移植的源码,然后KEIL的RTX目录下只有HAL_CM1/3/4.c和RT_HAL_ ...

HAL_CM0后面的新版里面已经添加了,将此贴里面的复制出来使用即可:
http://forum.armfly.com/forum.ph ... peid%26typeid%3D164
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

1

主题

4

帖子

6

积分

新手上路

积分
6
 楼主| 发表于 2019-2-8 13:00:01 | 显示全部楼层
eric2013 发表于 2019-2-8 10:39
HAL_CM0后面的新版里面已经添加了,将此贴里面的复制出来使用即可:
http://forum.armfly.com/forum.php ...

好的,谢谢
回复

使用道具 举报

1

主题

72

帖子

74

积分

初级会员

积分
74
发表于 前天 20:00 | 显示全部楼层
keil-mdk有一个很好的机制,用于没有源码的条件下,修改库里的函数的行为。
比如,在自己的c文件中加入如下代码就能实现你的目的(TICK_Exec函数是你自己的函数)
  1. ////////////////////////////////////////////////////////////////////////////////
  2. //|          |
  3. //| 函数名称 |: rt_tmr_tick
  4. //| 功能描述 |: 在RTX中,每tick都会调用rt_tmr_tick函数;
  5. //|          |: 所以利用armlink的挂钩特性,用于执行我们的tick服务
  6. //| 参数列表 |:
  7. //|          |:
  8. //| 返    回 |:
  9. //|          |:
  10. //| 备注信息 |: $Super$yourfunc 成为原先的函数标号。
  11. //|          |: $Sub$yourfunc   改造后的函数标号,替代原来的yourfunc标号。
  12. //|          |:
  13. //|          |: (  要注意rt_tmr_tick()是在tsk_lock()情况下执行的  )
  14. ////////////////////////////////////////////////////////////////////////////////
  15. extern void $Super$rt_tmr_tick(void);
  16. void $Sub$rt_tmr_tick(void)
  17. {
  18.   $Super$rt_tmr_tick();
  19.   TICK_Exec();
  20. }
复制代码
回复

使用道具 举报

1

主题

72

帖子

74

积分

初级会员

积分
74
发表于 前天 20:01 | 显示全部楼层
$Super$和$Sub$机制的具体信息,在mdk帮助文档里有详细说明。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|安富莱电子论坛 ( 鄂ICP备09023347号,公安机关备案号42010602000201 )

GMT+8, 2019-2-19 11:06 , Processed in 0.187952 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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