OpenEdv-开源电子网

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

把指纹AS608裸机例程移到FreeRTOS上,主机和传感器的通讯失败。求解

[复制链接]

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2022-5-7
在线时间
20 小时
发表于 2022-11-8 17:05:24 | 显示全部楼层 |阅读模式
19金钱
个人猜测是传感器把地址回传时,数据发往缓冲区或者主机接收时,任务被抢占了。但是试着整个freertos下只有这个指纹任务时,也是通讯失败。
各种延时已经是换成freertos下的延时,中断分组也是为4了。真不知道怎么解决了。困扰好几天了,希望大佬抽个时间帮忙看一下!


F103_MINI开发板_AS608.rar

8.58 MB, 下载次数: 9

freertos_as608.rar

7.36 MB, 下载次数: 13

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

使用道具 举报

7

主题

480

帖子

0

精华

高级会员

Rank: 4

积分
771
金钱
771
注册时间
2021-4-15
在线时间
304 小时
发表于 2022-11-9 09:36:01 | 显示全部楼层
自己用 串口助手抓板子发出来的数据比较 然后再修吧!
日常敲键--头秃一片
回复

使用道具 举报

19

主题

334

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1108
金钱
1108
注册时间
2018-11-6
在线时间
240 小时
发表于 2022-11-9 17:30:06 | 显示全部楼层
STM32F103移植FreeRTOS必须搞明白的系列知识---1(Cortex-CM3中断优先级)
https://blog.csdn.net/ba_wang_ma ... 1001.2014.3001.5502


STM32F103移植FreeRTOS必须搞明白的系列知识---2(FreeRTOS任务优先级)
https://blog.csdn.net/ba_wang_ma ... 1001.2014.3001.5502


STM32F103移植FreeRTOS必须搞明白的系列知识---3(堆栈)
https://blog.csdn.net/ba_wang_ma ... 1001.2014.3001.5501


STM32F103移植FreeRTOS必须搞明白的系列知识---4(FreeRTOSConfig.h配置文件)
https://blog.csdn.net/ba_wang_mao/article/details/127301127
回复

使用道具 举报

19

主题

334

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1108
金钱
1108
注册时间
2018-11-6
在线时间
240 小时
发表于 2022-11-9 22:18:35 | 显示全部楼层
1、你的任务优先级号是否超过  FreeRTOSConfig.h 文件中configMAX_PRIORITIES 宏  规定的数值。
2、你的串口中断优先级号是否低于      FreeRTOSConfig.h 文件中 configMAX_SYSCALL_INTERRUPT_PRIORITY 宏  规定的数值。
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2022-5-7
在线时间
20 小时
 楼主| 发表于 2022-11-10 17:43:56 | 显示全部楼层
霸王猫 发表于 2022-11-9 22:18
1、你的任务优先级号是否超过  FreeRTOSConfig.h 文件中configMAX_PRIORITIES 宏  规定的数值。
2、你的串 ...

您说的这两点,我这边是没错。我用串口排查了一下,应该是我在调用其他文件(as608.c)的函数,在vTaskDelay这边卡死了,然后查了一下网上的解决方案,最后还是没解决。。
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2022-5-7
在线时间
20 小时
 楼主| 发表于 2022-11-10 17:49:34 | 显示全部楼层
sinus 发表于 2022-11-10 17:43
您说的这两点,我这边是没错。我用串口排查了一下,应该是我在调用其他文件(as608.c)的函数,在vTaskDe ...

在找的模板工程(火子哥)运行vTaskDelay是没问题。。。而且Definition进去看定义也是一样的
回复

使用道具 举报

19

主题

334

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1108
金钱
1108
注册时间
2018-11-6
在线时间
240 小时
发表于 2022-11-10 18:26:39 | 显示全部楼层
1、FreeRTOSConfig.h 文件中的configTOTAL_HEAP_SIZE 宏定义 是否合适,系统默认 ( ( size_t ) ( 17 * 1024 ) )
2、每个任务堆栈是否合适


  按道理 vTaskDelay 不会引起死机呀

   最好进入调试模式,屏蔽掉引起死机的代码,然后打印出每个任务的堆栈信息和运行信息。
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2022-5-7
在线时间
20 小时
 楼主| 发表于 2022-11-14 09:54:38 | 显示全部楼层
霸王猫 发表于 2022-11-10 18:26
1、FreeRTOSConfig.h 文件中的configTOTAL_HEAP_SIZE 宏定义 是否合适,系统默认 ( ( size_t ) ( 17 * 1024 ...

1、我屏蔽掉会死机的代码,堆栈打印出来的剩余的空间是还有挺多的。
2、这边用xTaskDelay会卡死,原本的例程用的基于systick_clk封装的函数,可能是其中因果。但是没有头绪解决!
回复

使用道具 举报

19

主题

334

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1108
金钱
1108
注册时间
2018-11-6
在线时间
240 小时
发表于 2022-11-14 10:16:25 | 显示全部楼层
sinus 发表于 2022-11-14 09:54
1、我屏蔽掉会死机的代码,堆栈打印出来的剩余的空间是还有挺多的。
2、这边用xTaskDelay会卡死,原本的 ...



  1、先在KEIL上打断点,看每个任务是否能够跑起来
         如果每个任务能够跑起来,说明任务堆栈没有问题。
  2、把所有任务代码屏蔽,只剩下vTaskDelay
  3、然后将会死机的任务一点一点的添加代码,直到出现死机,就可以找到问题
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2022-5-7
在线时间
20 小时
 楼主| 发表于 2022-11-17 18:58:49 | 显示全部楼层
霸王猫 发表于 2022-11-14 10:16
1、先在KEIL上打断点,看每个任务是否能够跑起来
         如果每个任务能够跑起来,说明任务堆栈 ...

谢谢大佬,问题解决了,就是vTsakDelay()不能太大,我把他当成微秒直接*1000直接封装了,然后值太大了,延迟100ms,就相当于vTaskDELAY(100*1000),估计爆掉了。
//SysTick->LOAD为24位寄存器,所以,最大延时为:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK单位为Hz,nms单位为ms
//对72M条件下,nms<=1864
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 13:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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