OpenEdv-开源电子网

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

FreeRtos+F207中断问题

[复制链接]

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-12-18
在线时间
13 小时
发表于 2015-6-1 11:54:18 | 显示全部楼层 |阅读模式
5金钱

目前的平台是:在STM32 F207上跑FreeRtos系统

现象:操作VK3366这款芯片时(扩展了一个串口,其中串口接收通过中断来实现的),发现有时(时间不定,有时跑几个小时,有时几天)读取的寄存器的值是错误的(乱的)

原因分析:推测可能执行读操作时,被接收中断给断掉啦

问题1:FreeRtos中的优先级和F207中的中断优先级有关系吗?是如何关联的

问题2:如何保证FreeRtos中运行的函数不被,底层的硬件中断打断


肯请熟悉的大侠指点,小弟在此拜谢!!!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2015-6-1 12:09:01 | 显示全部楼层
1、中断不可大于RTOS的最低中断,一般是11
2、不可被硬件打断?那不要做了。。。。
学无止境
回复

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-12-18
在线时间
13 小时
 楼主| 发表于 2015-6-1 13:22:10 | 显示全部楼层
回复【2楼】jermy_z:
---------------------------------
非常感谢你的回复
现在中断优先级是这样设定的
#define configKERNEL_INTERRUPT_PRIORITY         255
#define configMAX_SYSCALL_INTERRUPT_PRIORITY  191 /* equivalent to 0xb0, or priority 11. */

VK3366中断
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;

不被硬件中断,可能没有表述清楚,是这样的,在执行下边这个函数时,不想被VK3366的接收中断,因为在中断中也会操控VK3366的寄存器,也就是说有没有什么方法使得下边的函数时一个原子操作
void UART_SendData( uint16_t UARTx, uint16_t data )
{
uint16_t ch, data1, addr;

/* Check the parameters */
   assert_param(IS_UART_ALL_PERIPH(UARTx));

ch = UARTx;
addr = SFDR << 9;
data1 = 0x8000 | ch | addr | data ;

SPI_VK3366_CS_LOW(); //ê1?üVK3224μ?SPI1|?ü

SPI_Send_Data( data1 );

SPI_VK3366_CS_HIGH();
}
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2015-6-1 13:29:52 | 显示全部楼层
1、 如果想屏蔽中断,则进入临界区,你百度下FREERTOS的临界区函数,我是记不住这个,用到时,也是百度函数名的

2、那个191就是相当于STM32的优先级11
     你别的中断,如果用了freertos的API ,优先级则不可大于11
学无止境
回复

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-12-18
在线时间
13 小时
 楼主| 发表于 2015-6-1 15:04:16 | 显示全部楼层
回复【4楼】jermy_z:
---------------------------------

是不是说
如果按照我现在的定义,在vk3366的接收中断里面不可以调用freertos的api函数
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2015-6-1 15:18:40 | 显示全部楼层
回复【5楼】Zohey:
---------------------------------
freertos里  规定 用第四组中断分配   并且中断优先级不大于11(如果你没修改过配置的话)

按照这个规定来吧
学无止境
回复

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-12-18
在线时间
13 小时
 楼主| 发表于 2015-6-1 15:46:38 | 显示全部楼层
回复【6楼】jermy_z:
---------------------------------
现在在工程中搜索了一下这个函数
NVIC_PriorityGroupConfig

发现有的地方用了分组1,有的地方用了分组2,还有的没有设定分组,是不是都要统一都要使用分组4

另外,freertos里  规定 用第四组中断分配 ,是在哪里配置的?

谢谢
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2015-6-1 16:41:41 | 显示全部楼层
全工程只需要一个NVIC_PriorityGroupConfig 来配下分组 

不明白你为什么好几个

至于为什么需要用第四组,freertos就是这么规定的,没什么需要配置的
学无止境
回复

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-12-18
在线时间
13 小时
 楼主| 发表于 2015-6-1 16:57:43 | 显示全部楼层
回复【8楼】jermy_z:
---------------------------------
对你的回复深表感谢

分组好几个是因为:NVIC_PriorityGroupConfig 在USART、USB、Ethernet初始化的时候,做了调用,并且配置了不同的值(自己对分组没有理解过)

再次对你的帮助表示感谢,有机会来江苏时请你喝茶!!!
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2015-6-1 17:09:25 | 显示全部楼层
回复【9楼】Zohey:
---------------------------------
我在南京
学无止境
回复

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-12-18
在线时间
13 小时
 楼主| 发表于 2015-6-1 17:14:37 | 显示全部楼层
回复【10楼】jermy_z:
---------------------------------

哈哈,看你来自东莞,我在无锡
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2015-6-1 17:25:16 | 显示全部楼层
回复【11楼】Zohey:
---------------------------------
那个可以自己选的,没有根据IP来索引
学无止境
回复

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-12-18
在线时间
13 小时
 楼主| 发表于 2015-6-1 18:03:03 | 显示全部楼层
回复【12楼】jermy_z:
---------------------------------
整个工程现在采用一个分组
所有的优先级设置成0,会出现程序卡死的问题
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2015-6-1 19:09:30 | 显示全部楼层
回复【13楼】Zohey:
---------------------------------
都跟你说  不要超过11! 你设成0  不是作死么
学无止境
回复

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-12-18
在线时间
13 小时
 楼主| 发表于 2015-6-1 21:54:05 | 显示全部楼层
回复【14楼】jermy_z:
---------------------------------
惭愧还是没搞明白你的意思

网口中断分组设置成2,优先级设置成
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;

STM32官网上freertos+lwip例程就是这么设定的啊
回复

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-12-18
在线时间
13 小时
 楼主| 发表于 2015-6-1 22:10:42 | 显示全部楼层
回复【14楼】jermy_z:
---------------------------------
越来越糊涂啦
回复

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-12-18
在线时间
13 小时
 楼主| 发表于 2015-6-2 12:12:39 | 显示全部楼层
回复【14楼】jermy_z:
---------------------------------
#define configKERNEL_INTERRUPT_PRIORITY         255
 #define configMAX_SYSCALL_INTERRUPT_PRIORITY  191 /* equivalent to 0xb0, or priority 11. */
 #define configLIBRARY_KERNEL_INTERRUPT_PRIORITY 15 

这三个值分别是什么意思?是如何和STM32中的中断对应的? 

使用  NVIC_PriorityGroupConfig();函数时应该传入分组几?(stm32官网上是使用的分组2) 

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority这个优先级复制都应该在0x8之上??? 


刚开始捣鼓没多久,还望赐教,
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2015-6-2 12:14:28 | 显示全部楼层
回复【17楼】Zohey:
---------------------------------
上面已经说得很明白了   剩下的自己捉摸吧

捉摸不透 百度  百度上对于freertos的中断也有几篇讲解,虽然不多
学无止境
回复

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-12-18
在线时间
13 小时
 楼主| 发表于 2015-6-2 12:20:30 | 显示全部楼层
回复【18楼】jermy_z:
---------------------------------
好的,谢谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 17:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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