Details
-
Type: Bug
-
Status: Closed
-
Priority: Minor
-
Resolution: Fixed
-
Affects Version/s: V2.0.0.5, V2.0.0.6, V2.0.0.7, V2.0.0.8, V2.0.0.9, V2.0.0.10, V2.0.1.0, V2.0.1.1, V2.0.1.3, V2.0.1.4, V2.0.1.8, V2.0.2.0, V2.0.2.1, V2.0.3.0, V2.0.3.1, V2.0.3.3, V2.0.4.0, V2.0.4.1, V2.0.4.2, V2.0.4.3, V2.0.4.4, V2.0.4.5, V2.0.4.6, V2.0.5.0, V2.0.6.0, V2.0.7.0, V2.0.8.0, V2.0.8.3, V2.0.8.4, V2.0.8.5, V2.0.8.7, V2.0.8.8, V2.0.8.9, V2.0.8.10, V2.0.8.11, V2.0.8.12, V2.0.8.14, V2.0.8.15, V2.0.8.16, V2.0.8.17, V2.0.8.18, V2.0.8.19, V2.0.8.20, V2.0.8.21, V2.0.8.22, V2.0.8.23, V2.0.8.24, V2.0.8.25, V2.1.1.0, V2.1.2.0, V2.1.3.0, V2.1.4.0, V2.1.5.0, V2.1.5.1, V2.1.6.0, V2.1.6.1, V2.1.7.0, V2.1.7.1, V2.1.8.0, V2.1.8.1, V2.1.9.0, V2.1.9.1, V2.1.10.0
-
Component/s: Drivers
-
Labels:None
-
Account:SDO rcX (SDORCX)
Description
The function Drv_SysTimeGetTime is not save against calling from different Task contexts. If Drv_SysTimeGetTime is interrupted by a call to Drv_SysTimeGetTime from another task, the first caller will get the nanosecond register value from the other call. If in that time wrap over of the systime second register occurs, an invalid combination of second and nanosecond value is delivered:
1. Caller #1 reads Second Register Value "0", Nanosecond Register is freezed to 0xFFFFFFFF
2. Caller #2 interrupts Caller #1
3. Caller #2 reads Second Register Value "1", Nanosecond Register is freezed to 0x0000abcd (eg)
4. Caller #2 reads nanosecond register Value "0x0000abcd"
5. Caller #1 reads nanosecond register Value "0x0000abcd"
-> Caller #1 should get 0/0xFFFFFFFF but gets 0/0x0000abcd which is completely wrong