Получение системного времени в Vxworks
Есть ли в любом случае, чтобы получить системное время в VxWorks, кроме tickGet() и tickAnnounce? Я хочу измерить время между переключателями задач указанной задачи, но я думаю, что точность tickGet() недостаточно хороша, потому что два значения tickGet() в начале и в конце функции taskSwitchHookAdd всегда одинаковы!
2 ответа
Если вы хотите попробовать переключить время, я предполагаю, что вам нужен таймер хотя бы на микросекундном (нас) уровне.
Обычно таймеры / часы такого мелкозернистого типа предоставляются только той платформой, на которой вы работаете. Если вы работаете со встроенной системой, вы можете попробовать прочитать руководства по пакету поддержки вашей платы (если он есть) и посмотреть, есть ли какие-либо функции для доступа к различным таймерам на плате.
Более низкоуровневое решение состоит в том, чтобы выяснить процессор, работающий в вашей системе, а затем написать некоторый простой код сборки, чтобы опросить внутренний регистр временной базы процессора (TBR). Это может потребовать небольшого исследования процессора, на котором вы работаете, но это может быть легко сделано.
Если вы работаете на процессоре на основе PPC, вы можете использовать код ниже, чтобы прочитать TBR:
loop: mftbu rx #load most significant half from TBU
mftbl ry #load least significant half from TBL
mftbu rz #load from TBU again
cmpw rz,rx #see if 'old' = 'new'
bne loop #repeat if two values read from TBU are unequal
На процессоре x86 вы можете использовать RDTSC
Инструкция по сборке, чтобы прочитать счетчик меток времени (TSC). На vxWorks pentiumALib имеет некоторые библиотечные функции (pentiumTscGet64()
а также pentiumTscGet32()
) что сделает чтение TSC проще с помощью C.
Удачи!
Это зависит от того, на какой платформе вы находитесь, но если это x86, вы можете использовать:
pentiumTscGet64();