CUBEMX+freertos 串口快速发送和回复问题
我串口接收使用 HAL中断函数,每次接收一个字节,通过xQueueSendFromISR 存入创建好的队列中。 在FREERTOS 任务里 取出数据并做处理, 然后发现在10ms定时发送开始,出现了回复卡死的情况。之后移除freertos 直接在中断中做同样的处理,发现1ms 都不会出问题,想问问,这是什么问题。大家做这类项目,串口的处理方式都是怎么做的。这是freertos中的情况,没多久就中断无反应,手动发送也无反应
这是裸机,直接串口中断中处理数据,1ms定时发送
改成1秒一次,接收任务优先级设置为最高,看看是否还有问题。方便排查是否是接收处理不及时导致消息队列已经满了。 eric2013 发表于 2020-7-3 17:12
改成1秒一次,接收任务优先级设置为最高,看看是否还有问题。方便排查是否是接收处理不及时导致消息队列已 ...
时间短不会有问题,我把 该任务的阻塞延时1ms改成了 任务切换taskYIELD 就好了,我说哪里怪怪的:dizzy: eric2013 发表于 2020-7-3 17:12
改成1秒一次,接收任务优先级设置为最高,看看是否还有问题。方便排查是否是接收处理不及时导致消息队列已 ...
硬汉哥,我这个 内部AD三路dma采集有个问题,他dma存放的数据 经常会改变位置 这是怎么回事。
正常应该是 ADC_Value为 900多的 cpu温度采样,ADC_Value为3000左右,ADC_Value为4000左右
一开始还以为是和da的dma 冲突,关了DA的dma模式 还是这样。
adc的dma配置是 使能的扫描转换和 连续转换模式
void AD_Sampling_Function(void *argument)
{
/*温度采集实验*/
unsigned int adc_v;
double adcx;
double temp;
/*三路dma采集实验*/
uint32_t ADC_Value={0};
for(;;)
{
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&ADC_Value,3);
temp = (ADC_Value*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,ADC_Value,ADC_Value);
// printf("温度:%f,温度AD值:%d\n",temp,ADC_Value);
// printf(" AD1 value = %1.3fV ,DA1(PA4)值:%d, AD2 value = %1.3fV,DA2(PA5)值:%d\r\n", ADC_Value*3.3f/4096,ADC_Value,ADC_Value*3.3f/4096,ADC_Value);
HAL_ADC_Stop(&hadc1);
osDelay(2);
}
}
opsd999 发表于 2020-7-4 15:49
硬汉哥,我这个 内部AD三路dma采集有个问题,他dma存放的数据 经常会改变位置 这是怎么回事。
正常应该 ...
看看ADC初始化的时候,是不是将一些重要的结构体变量设置为局部变量了,而且没有对此局部变量做初始化。
页:
[1]