使用freertos 串口接收丢数据

在加入FreeRTOS操作系统后,设备远程升级时出现数据丢失。通过调整中断优先级,将串口中断优先级设置高于FreeRTOS的管理优先级,解决了数据丢失问题。升级包接收从原来的417字节增加到544字节,实现正常远程升级。
摘要由CSDN通过智能技术生成

这个问题让调了将近两天的时间,终于解决,还是有一点成就感的。我犯的这个错误可能也是好多操作系统初学者比较容易犯的错误,在此做一下总结,希望在以后的工作中遇到同样问题的小伙伴能尽快解决。

背景:以前程序无操作系统,可实现设备的远程升级。最近将程序加入了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

### 回答1: s32k144是一款微控制器芯片,可以使用FreeRTOS来进行串口接收数据接收数据的基本步骤如下: 首先,需要在s32k144中配置串口模块,并将其连接到合适的引脚。配置串口模块可以使用相应的寄存器设置,确定波特率、数据位、停止位和校验位等参数。 其次,在FreeRTOS任务中创建一个用于接收串口数据的任务。使用FreeRTOS提供的任务创建API,可以创建一个新的任务,并指定任务的优先级、堆栈大小和任务函数等。 然后,在任务函数中使用适当的串口接收函数来接收数据FreeRTOS提供了一套用于在任务中进行串口通信的API,可以使用这些API中的适当函数来实现串口接收功能。常用的接收函数包括接收一个字节或接收一串数据。 最后,在任务中处理接收到的数据。通过对接收缓冲区进行解析和处理,可以根据实际需求对数据进行相应的操作。例如,可以对接收到的数据进行解码、存储或传输等。 需要注意的是,在使用FreeRTOS进行串口接收数据时,要考虑数据的同步和互斥问题。可以使用信号量或互斥锁等机制来实现多个任务之间的数据共享和保护,避免数据竞争和资源冲突的问题。 ### 回答2: s32k144是一款基于Cortex-M4内核的32位微控制器,而FreeRTOS是一个非常流行的开源实时操作系统。在s32k144上使用FreeRTOS来实现串口接收数据,可以按照以下步骤进行操作: 1. 首先,在s32k144上初始化串口,在代码中设置波特率、数据位、停止位、校验位等信息,并打开串口。 2. 接下来,创建一个FreeRTOS任务,在任务中实现串口接收数据逻辑。可以利用串口中断方式进行数据接收。在中断服务函数中,将接收到的数据存储在一个缓冲区中,并设置一个标志位表示数据接收完成。 3. 在任务中,使用类似于轮询的方式,不断检查标志位,判断数据是否接收完成。如果接收完成,可以对数据进行处理,例如解析、存储或显示。 4. 为了确保数据接收完整性,可以使用信号量来进行同步处理。在串口接收数据任务中,当数据接收完成后,释放一个信号量,其他任务可以通过等待该信号量来获取已处理的数据。 5. 如果需要处理多个串口接收任务,可以创建多个任务,并在任务中分别处理不同的串口接收逻辑。 总之,使用FreeRTOS来实现s32k144串口接收数据,可以使程序的结构清晰、任务之间的调度更加灵活,提高系统的响应速度和并发性能。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值