Skip to content

Commit

Permalink
Merge pull request #55 from lhw2002426/rtc
Browse files Browse the repository at this point in the history
improve x86 rtc performance
  • Loading branch information
coolyjg authored Feb 27, 2024
2 parents c28a269 + cda6202 commit 98b36ec
Showing 1 changed file with 23 additions and 3 deletions.
26 changes: 23 additions & 3 deletions modules/ruxhal/src/time.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,18 +41,38 @@ pub const NANOS_PER_MICROS: u64 = 1_000;
pub fn current_time_nanos() -> u64 {
ticks_to_nanos(current_ticks())
}
///record first time res from x86 rtc as base time
#[cfg(all(feature = "rtc", target_arch = "x86_64"))]
pub static mut BASE_TIME: u64 = 0;
///record last time res from x86 rtc to correct time
#[cfg(all(feature = "rtc", target_arch = "x86_64"))]
pub static mut LAST_TIME: u64 = 0;

/// Returns the current clock time in [`TimeValue`].
#[allow(unreachable_code)]
pub fn current_time() -> TimeValue {
#[cfg(any(target_arch = "x86_64", target_arch = "aarch64"))]
#[cfg(feature = "rtc")]
#[cfg(all(feature = "rtc", target_arch = "x86_64"))]
{
unsafe {
let nanos = current_time_nanos();
if BASE_TIME == 0 {
BASE_TIME = rtc_read_time();
}
if (nanos / NANOS_PER_SEC) - LAST_TIME > 1800 {
BASE_TIME = rtc_read_time() - (nanos / NANOS_PER_SEC);
LAST_TIME = nanos / NANOS_PER_SEC;
}
let rtc_time = BASE_TIME + (nanos / NANOS_PER_SEC);
return Duration::new(rtc_time, (nanos % (NANOS_PER_SEC)) as u32);
}
}
#[cfg(all(feature = "rtc", target_arch = "aarch64"))]
{
let nanos = current_time_nanos();
let rtc_time = rtc_read_time();
return Duration::new(rtc_time, (nanos % (NANOS_PER_SEC)) as u32);
}
TimeValue::from_nanos(current_time_nanos() + 1_000_000_000)
TimeValue::from_nanos(current_time_nanos())
}

/// set time value
Expand Down

0 comments on commit 98b36ec

Please sign in to comment.