S32K1xx系列的SDK的LIN读取信号的方式是通过PE直接生成的,如:
如果在调用这个接口还没有执行完的时候,LIN总线更新了该信号,然后中断返回接着读取该信号,就会出现信号内容不一致的情况,这不是原子操作。
实现读LIN信号的原子操作的常规方式,读取信号之前关闭LIN串口中断,读取完信号后再开LIN串口中断,这种方式的话可能由于一些原因,比如软件实现自动波特率,就可能会导致LIN通信失败,这时就不能用这种方式。
另一种替代方式为判断标志位的方式,如果在读取信号值完成后标志改变,就再次读取该信号值一次。