S32K1xx的SDK中的LIN协议栈的写信号是原子操作的,SDK自动生成的写信号的API,如下图所示:
发送LIN信号的实现,如下图所示:
主要实现的方式是通过g_buffer_backup_data[]和g_lin_frame_updating_flag_tbl[],如果信号写入只写入了一部分,那么g_lin_frame_updating_flag_tbl[]中该信号写入的部分标志就为1,那么发送时就从g_buffer_backup_data[]获取而不是从只更新一部分的g_lin_frame_data_buffer[]中获取,这就保证发送的信号一定是完整的,不会是只更新一半的信号。当信号写入完成后,就会清除g_lin_frame_updating_flag_tbl[]中的该信号标志为0,下次发送的就为更新完成的信号内容。