OpenEdv-开源电子网

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

STM8在IAR环境下做串口升级时,怎么实现IAP和APP的中断可以使用呢?

[复制链接]

11

主题

66

帖子

0

精华

高级会员

Rank: 4

积分
643
金钱
643
注册时间
2018-4-17
在线时间
152 小时
发表于 2019-2-25 11:00:30 | 显示全部楼层 |阅读模式
20金钱
参考网上的,在IAP工程中加入以下代码
//中断向量表重建
__root const long reintvec[]@".intvec"=
{ 0x82008080,0x82009004,0x82009008,0x8200900c, //当应用程序地址不是0x9000时则要相应改掉除第一个0x82008080以外的数值
0x82009010,0x82009014,0x82009018,0x8200901c,
0x82009020,0x82009024,0x82009028,0x8200902c,
0x82009030,0x82009034,0x82009038,0x8200903c,
0x82009040,0x82009044,0x82009048,0x8200904c,
0x82009050,0x82009054,0x82009058,0x8200905c,
0x82009060,0x82009064,0x82009068,0x8200906c,
0x82009070,0x82009074,0x82009078,0x8200907c,
};
会出现以下错误:
[td]Error[Lp004]: actual size (0x100) exceeds maximum size (0x80) for block "INTVEC"

而且这种方法只能实现APP中断,而IAP却不能有中断


还有一种方法是将中断向量表映射到RAM中,可以实现APP和IAP都能中断,那么该怎么实现,希望各位大神不吝赐教。


[/td]

最佳答案

查看完整内容[请看2#楼]

终于解决了,中断向量表映射函数和跳转函数可以参考 http://www.openedv.com/forum.php?mod=viewthread&tid=79611&extra=page%3D1 该贴中的映射函数: //重新初始化STM8的中断向量表 把它重新定义到APP的中断向量中 void STM8_HanderIqr_Init(void) 和跳转函数: goto_app(); //运行APP 要实现IAP和APP都能实现中断,映射函数不应该在一开始就执行, 而是在执行跳转函数goto_app()之前执行, 例如: STM8_H ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

66

帖子

0

精华

高级会员

Rank: 4

积分
643
金钱
643
注册时间
2018-4-17
在线时间
152 小时
 楼主| 发表于 2019-2-25 11:00:31 | 显示全部楼层
终于解决了,中断向量表映射函数和跳转函数可以参考
http://www.openedv.com/forum.php ... &extra=page%3D1
该贴中的映射函数:
//重新初始化STM8的中断向量表  把它重新定义到APP的中断向量中
void STM8_HanderIqr_Init(void)
和跳转函数:
goto_app();  //运行APP

要实现IAP和APP都能实现中断,映射函数不应该在一开始就执行,
而是在执行跳转函数goto_app()之前执行,
例如:
         STM8_HanderIqr_Init();
         goto_app();
从APP跳转会IAP程序是也同理,映射地址换一下就OK了
回复

使用道具 举报

11

主题

66

帖子

0

精华

高级会员

Rank: 4

积分
643
金钱
643
注册时间
2018-4-17
在线时间
152 小时
 楼主| 发表于 2019-2-25 12:00:13 | 显示全部楼层
关于中断向量表重建出现的错误,解决方法是在.icf文件中的
define block INTVEC with size = 0x80 { ro section .intvec };
改为:
define block INTVEC with size = 0x100 { ro section .intvec };

然后出现的问题是,APP程序中的串口接收中断接收到的是空,也就是
if(UART2_GetITStatus(UART2_IT_RXNE )!= RESET)这条件为 false
回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2019-2-25 14:52:55 | 显示全部楼层
在Boot使用相关中断后,执行APP前关闭boot打开的中断应该就可以了吧
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

11

主题

66

帖子

0

精华

高级会员

Rank: 4

积分
643
金钱
643
注册时间
2018-4-17
在线时间
152 小时
 楼主| 发表于 2019-2-25 15:21:20 | 显示全部楼层
DongInker 发表于 2019-2-25 14:52
在Boot使用相关中断后,执行APP前关闭boot打开的中断应该就可以了吧

关boot的中断了,不行的,APP程序一开中断就死了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2019-7-31
在线时间
2 小时
发表于 2019-8-3 17:49:43 | 显示全部楼层
感謝分享,正在学习!
回复

使用道具 举报

2

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
532
金钱
532
注册时间
2014-3-3
在线时间
51 小时
发表于 2019-11-9 08:35:23 | 显示全部楼层
谢谢你的帖子,我借鉴了一下.仔细的学习后.其实不难.我已经搞定了.谢谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 12:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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