RTE对数据一致性的管理

>>>点我返回《AUTOSAR专栏》目录

目录

  1. 数据一致性问题的引入
  2. 同一个SWC
  3. 不同的SWC

1. 数据一致性问题的引入

这不只是AUTOSAR系统中特有的问题,其他的RTOS都会有这种任务间的数据一致性问题。

eg.比如我要计算x+11的值
正常情况如下(只有一个task用到x的情况),
当x=1时,x+11值为12
当x=8时,x+11值为19
但是如果x被其他task使用就不一样了,举个例子,x除了在taskA中使用外,x还在taskB中使用,如下图:
RTE对数据一致性的管理_第1张图片

  1. taskA执行,x被赋值为1

  2. 然后OS调度,调到了TaskB去执行,x变为6

  3. task B执行完后,返回Task A

  4. Task A继续执行,但是x已经变成了6

  5. Task计算x+11,结果为6+11=17,而不是11+1=12
    RTE对数据一致性的管理_第2张图片
    所以你代码如果不做处理,任由OS调度,就会出bug,就会出现上述6+11的结果是12

2. 同一个SWC

一个SWC有不同的Runable,但是Runable可能被映射到不同的task,这时不同task的两个Runable去访问同一个全局变量,就出现数据一致性问题。
RTE对数据一致性的管理_第3张图片
Vecotr提供两种解决方案:

  1. 临界区域保护法:
......
Rte_Enter_<name>();
//这里放置被保护的语句
Rte_Exit_<name>();
......
  1. 只在变量被改变的时候保护
Rte_IrvWrite_<re>_<name>()
Rte_IrvRead_<re>_<name>()

3. 不同的SWC

不同SWC之间通信(包括ECU内部的SWC和SWC之间的通信、ECU和ECU之间的SWC之间的通信)

不用我们管数据一致性的问题,RTE会直接处理这些。
RTE对数据一致性的管理_第4张图片

>>>点我返回《AUTOSAR专栏》目录
扫描下方的二维码关注“汽车软件攻城狮”可第一时间获取更新!
RTE对数据一致性的管理_第5张图片

你可能感兴趣的:(AUTOSAR专栏)