硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3235|回复: 4
收起左侧

[FreeRTOS] CUBEMX+freertos 串口快速发送和回复问题

[复制链接]

16

主题

62

回帖

110

积分

初级会员

积分
110
发表于 2020-7-3 13:35:21 | 显示全部楼层 |阅读模式
我串口接收使用 HAL中断函数,每次接收一个字节,通过xQueueSendFromISR 存入创建好的队列中。 在FREERTOS 任务里 取出数据并做处理, 然后发现在10ms定时发送开始,出现了回复卡死的情况。之后移除freertos 直接在中断中做同样的处理,发现1ms 都不会出问题,想问问,这是什么问题。大家做这类项目,串口的处理方式都是怎么做的。
微信截图_20200703132730.png
这是freertos中的情况,没多久就中断无反应,手动发送也无反应
微信截图_20200703132954.png
这是裸机,直接串口中断中处理数据,1ms定时发送
微信截图_20200703132954.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2020-7-3 17:12:38 | 显示全部楼层
改成1秒一次,接收任务优先级设置为最高,看看是否还有问题。方便排查是否是接收处理不及时导致消息队列已经满了。
回复

使用道具 举报

16

主题

62

回帖

110

积分

初级会员

积分
110
 楼主| 发表于 2020-7-4 09:41:54 | 显示全部楼层
eric2013 发表于 2020-7-3 17:12
改成1秒一次,接收任务优先级设置为最高,看看是否还有问题。方便排查是否是接收处理不及时导致消息队列已 ...

时间短不会有问题,我把 该任务的阻塞延时1ms改成了 任务切换taskYIELD 就好了,我说哪里怪怪的
回复

使用道具 举报

16

主题

62

回帖

110

积分

初级会员

积分
110
 楼主| 发表于 2020-7-4 15:49:33 | 显示全部楼层
eric2013 发表于 2020-7-3 17:12
改成1秒一次,接收任务优先级设置为最高,看看是否还有问题。方便排查是否是接收处理不及时导致消息队列已 ...

硬汉哥,我这个 内部AD三路dma采集有个问题,他dma存放的数据 经常会改变位置 这是怎么回事。
正常应该是 ADC_Value[0]为 900多的 cpu温度采样,ADC_Value[1]为3000左右,ADC_Value[2]为4000左右
一开始还以为是和da的dma 冲突,关了DA的dma模式 还是这样。
adc的dma配置是 使能的扫描转换和 连续转换模式

微信截图_20200704154418.png 微信截图_20200704153834.png
void AD_Sampling_Function(void *argument)
{
        /*温度采集实验*/
        unsigned int adc_v;
        double adcx;
        double temp;
        /*三路dma采集实验*/
        uint32_t ADC_Value[3]={0};

        for(;;)
        {

                HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&ADC_Value,3);
                temp = (ADC_Value[0]*3.3 /4096 -0.76)/0.0025+25;
                //temp = (adc_v*3.3 /4096 -0.76)/0.0025+25;
                printf("%d %d %d\n",ADC_Value[0],ADC_Value[1],ADC_Value[2]);
//                printf("温度:%f,温度AD值:%d\n",temp,ADC_Value[0]);
//                printf(" AD1 value = %1.3fV ,DA1(PA4)值:%d, AD2 value = %1.3fV,DA2(PA5)值:%d\r\n", ADC_Value[1]*3.3f/4096,ADC_Value[1],ADC_Value[2]*3.3f/4096,ADC_Value[2]);
                HAL_ADC_Stop(&hadc1);

                osDelay(2);
        }
}

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2020-7-5 17:31:38 | 显示全部楼层
opsd999 发表于 2020-7-4 15:49
硬汉哥,我这个 内部AD三路dma采集有个问题,他dma存放的数据 经常会改变位置 这是怎么回事。
正常应该 ...

看看ADC初始化的时候,是不是将一些重要的结构体变量设置为局部变量了,而且没有对此局部变量做初始化。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-3 16:23 , Processed in 0.235323 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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