请问如何软件实现类似“内存数据修改中断”这样的机制?

2020-01-10 19:44发布

实验环境:
stm32f103vct6 + mdk5.23
未使用操作系统

实验目的:
单片机上实现了一个modbus从机与上位机进行交互。
期望达到如下效果:
例如,在modbus寄存器中有一个baudrate变量,当上位机通过写保持寄存器(功能码0x10)发送数据来更新baudrate寄存器,那么单片机直接调用baudrate_init()函数初始化硬件串口波特率。

实验过程:
我当前解决办法
在while(1)中轮训查看该变量的值,如果变量被修改,那么调用baudrate_init()。
* 这种方式有点笨。
* 实时性得不到保证(不止一个变量,类似变量还有很多,而且有的变量还对实时性有一定要求)。
我期望解决办法
最好能实现类似中断调用,当该寄存器内容被修改,自动进入xxx中断,在中断服务函数中完成调用baudrate_init()。

实验问题:
如果不能通过中断方式解决(据我所知,单片机根本没有内存数据修改中断,哈哈),有没有其它软件思路、方式、机制等能实现类似效果?
恳请各路大神各显神通!在此感谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
K.O.Carnivist
1楼-- · 2020-01-11 12:35
楼主可以试试6楼方法,用DWT的watchpoint比较器,触发Debug Monitor异常。
缺点是(STM32上)只有4个;另外可能不能在debug模式下用。
lingdianhao
2楼-- · 2020-01-11 13:02
modbus里面对比数据,然后加回调函数。
擦鞋匠
3楼-- · 2020-01-11 18:47
zf12862177 发表于 2018-6-1 22:57
这个只有用ARM里面的TRAC功能,貌似是JTAG 或者debug模块。里面可以设4个内存断点,不断的比较指令是否读取 ...

感谢指教!
这个功能真的还不知道,涨知识了!

一周热门 更多>