日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

系统时间

發布時間:2023/11/28 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 系统时间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

系統時間

System Time

介紹

在前面的一篇文章中介紹了實時操作系統環境中的時間概念,以及與時間相關的設施的概念,這些設施可能與RTOS一起使用。

時鐘滴答聲

所有的計時設備都由一個硬件時鐘驅動。這只是一個振蕩器,它以固定的間隔產生一個中斷。為了使定時數對應用程序有意義,必須知道振蕩器的頻率。

時鐘中斷服務程序

由硬件時鐘產生的中斷必須由中斷服務例程(ISR)適當地處理,它實現了RTOS的所有定時功能。Nucleus SE中時鐘ISR的詳細信息將在以后的文章中介紹。

計時設置

Nucleus RTO和Nucleus SE包括許多計時設施:

滴答時鐘-這是一個簡單的計數器,由時鐘ISR遞增。在Nucleus RTOS和Nucleus SE中,這個計數器是32位寬的,任務可以設置和讀取它的值。在Nucleus SE中,計時時鐘是可選的。本章余下部分將更詳細地討論這一主題。

應用程序計時器–Nucleus RTO和Nucleus SE都支持計時器對象。

時間片調度——在Nucleus RTO中,相同優先級的任務按循環調度,但也可以應用時間片。在Nucleus SE中,時間片調度器是一個選項;這在前面的文章中詳細討論過。

任務睡眠。任務可以選擇在指定的時間段內掛起(進入休眠狀態)。

API調用超時-在Nucleus RTO和Nucleus SE中,許多API調用允許任務掛起,等待資源的可用性。這種暫停可以是不確定的,或者在Nucleus RTOS中,可以指定可選的超時時間。Nucleus SE不支持API調用超時。

準確度

在這一點上,簡短地談一下計時精度是值得的。

定時設備的精度完全取決于時鐘振蕩器的頻率。例如,如果每隔10毫秒接收一個脈沖,而應用程序任務想要延遲100毫秒,則顯然需要等待10個脈沖。然而,目前尚不清楚上一次脈沖發生的時間——可能是現在,也可能是近10毫秒前。因此,100毫秒的延遲可能長達(略低于)110毫秒。

解決這個問題的一個明顯的方法是增加振蕩器的頻率。如果脈沖以1毫秒的間隔出現,100毫秒的延遲永遠不會超過101毫秒。缺點是時鐘ISR將花費10倍的CPU時間,這是一個開銷。

系統設計者必須確定所需定時器精度和可用CPU功率之間的平衡。

配置系統時間

與Nucleus SE的大多數方面一樣,系統時間的配置主要由nuse_config.h中的#define語句控制。密鑰設置是NUSE_SYSTEM_TIME_SUPPORT,這將啟用該功能。指定對象的數量是沒有問題的-系統時間只是啟用或不啟用。

選擇非零值是系統時間的“主啟用”。這將導致定義一個數據結構,本文稍后將對此進行詳細介紹。它還激活API啟用設置。

API啟用

Nucleus SE中的每個API函數(服務調用)在nuse_config.h中都有一個啟用的#define符號。對于系統時間,這些是:

NUSE_CLOCK_SET

NUSE_CLOCK_RETRIEVE

默認情況下,這兩個值都設置為FALSE,從而禁用每個服務調用并禁止包含任何實現代碼。要為應用程序配置系統時間,需要選擇要使用的API調用并將其啟用符號設置為TRUE。

默認情況下,從配置文件nuse_config.h中提取。

#define NUSE_SYSTEM_TIME_SUPPORT FALSE
/* Enables the system tick clock *
/#define NUSE_CLOCK_SET FALSE /* Service call enabler /#define NUSE_CLOCK_RETRIEVE FALSE / Service call enabler */

如果啟用了系統時API函數而未啟用系統時功能,則會導致編譯時錯誤。如果您的代碼使用尚未啟用的API調用,則會導致鏈接時間錯誤,因為應用程序中不會包含任何實現代碼。
系統時間服務調用

Nucleus RTOS支持與系統時間相關的兩個服務調用,它們提供以下功能:

設置系統時間值。由Nucleus SE中的NUSE_Clock_Set()實現。

獲取系統時間值。由Nucleus SE中的NUSE_Clock_Retrieve()實現。

將詳細檢查每個服務調用的實現。

系統時間設置和獲取服務

唯一可以對系統時間值執行的操作是將其設置為一個值并獲取(檢索)其當前值。Nucleus RTOS和Nucleus SE各自為這些操作提供了兩個基本的API調用,這里將對此進行討論。

系統時間值的解釋取決于應用程序,因為它只是對自上次重置計數器以來的時鐘“滴答”次數的計數。要使用此信息,必須知道時鐘振蕩器的頻率。

設置時間

任何任務都可以通過調用此API函數來設置系統時間。

用于設置時間的Nucleus RTOS API調用

Service call prototype:

VOID NU_Set_Clock(UNSIGNED new_value);

Parameters:

new_value – the value to which the system time is to be set

Returns:

none.

Nucleus SE API Call for Setting Time

This API call supports the key functionality of the Nucleus RTOS API.

Service call prototype:

void NUSE_Clock_Set(U32 new_value);

Parameters:

new_value – the value to which the system time is to be set

Returns:

none.

設置時間的Nucleus SE實現

代碼非常簡單。提供的值只是存儲在一個關鍵部分的NUSE_Tick_時鐘中。

檢索時間

任務可以通過調用此API函數來獲取系統時間。

用于檢索時間的Nucleus RTOS API調用

Service call prototype:

UNSIGNED NU_Retrieve_Clock(VOID);

Parameters:

none

Returns:

the current system time value

Nucleus SE API Call for Retrieving Time

This API call supports the key functionality of the Nucleus RTOS API.

Service call prototype:

U32 NUSE_Clock_Retrieve(void);

Parameters:

none

Returns:

the current system time value

時間檢索的Nucleus-SE實現

代碼非常簡單。在臨界區內獲得NUSE_Tick_Clock的值并返回。

數據結構

系統時間使用一種數據結構——在RAM中——它只是一個32位字。

強烈建議應用程序代碼不要直接訪問這個數據結構,而是使用提供的API函數。這避免了與Nucleus SE未來版本的不兼容和不必要的副作用,并簡化了將應用程序移植到Nucleus RTOS的過程。這里包含數據結構的詳細信息,以便更容易地理解服務調用代碼的工作方式和調試。

RAM Data

The data structure is:

NUSE_Tick_Clock – This is a variable of type U32 where the system clock tick count is stored.

Nucleus SE啟動時,此數據結構由NUSE_Init_Task()初始化為零。未來的文章將全面描述Nucleus SE的啟動過程。

ROM數據

沒有與系統時間相關聯的ROM數據結構。

系統時間數據占用

與Nucleus SE的所有方面一樣,系統時間所需的數據內存量是很容易預測的。

ROM數據占用為0。

RAM數據占用(字節)總是4。

未實現的API調用

所有與系統時間相關的Nucleus RTOS API調用在Nucleus SE中都是等效的。

與Nucleus PLUS兼容

對于Nucleus SE的各個方面,我的目標是盡可能保持與Nucleus RTOS的高級別應用程序代碼兼容性。系統時間也不例外,而且,從用戶的角度來看,它的實現方式與Nucleus RTOS中的方式大致相同。Nucleus RTOS API調用可以直接映射到Nucleus SE調用上。

總結

以上是生活随笔為你收集整理的系统时间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。