金牌会员
- 积分
- 1108
- 金钱
- 1108
- 注册时间
- 2018-11-6
- 在线时间
- 240 小时
|
发表于 2020-3-4 08:59:26
|
显示全部楼层
本帖最后由 霸王猫 于 2020-3-4 12:15 编辑
不知道你的2个任务是把同一组数据发送给不同的串口(例如:USART1和USART2)还是发送给同一个串口?
如果是发送给相同的串口,就应该把这2个任务合并成一个任务。
如果是发送给不同的串口,就要使用2个任务,使用互斥信号量保护这个公共数组。
例如1:发送给同一个串口
如果需要发送不同类型的报文,创建一个队列,将不同类型的报文装在队列中,需要发送时,出队发送即可。
例如2:发送给不同的串口
int8u Buffer[20];//公共数组
int8u usart1_send_buffer[255];//串口1发送数据
int8u usart2_send_buffer[255];//串口2发送数据
void task1()
{
while (1)
{
获取互斥信号量;
memcopy(usart1_send_buffer,Buffer,20);//将公共数组中的数据拷贝到usart1_send_buffer
释放互斥信号量;
开启发送完成中断;
发送usart1_send_buffer的第1个字节;//其余字节在中断服务程序中发送
}
}
void task2()
{
while (1)
{
获取互斥信号量;
memcopy(usart2_send_buffer,Buffer,20);//将公共数组中的数据拷贝到usart2_send_buffer
释放互斥信号量;
开启发送完成中断;
发送usart2_send_buffer第1个字节;//其余字节在中断服务程序中发送
}
}
|
|