这个问题让调了将近两天的时间,终于解决,还是有一点成就感的。我犯的这个错误可能也是好多操作系统初学者比较容易犯的错误,在此做一下总结,希望在以后的工作中遇到同样问题的小伙伴能尽快解决。
背景:以前程序无操作系统,可实现设备的远程升级。最近将程序加入了freertos操作系统,出现远程升级包出现丢数据的情况。每包数据为544个字节。先说一下相关的系统设置:
1、中断优先级的设置NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4)选择第四组模式 , 所有都用于抢占优先级的设置。
2、串口优先级的设置
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 7;
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
3、freertos的最高可管理优先级设置
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 4 //系统可管理的最高中断优先级
问题:设备在接收升级包的时候会丢失数据,实际发包数为544个字节,而接受侧接收的数据为417左右。
解决方案:将串口优先级设置为
NVIC_InitStructure