Xilkernel API函數介紹

URL: http://hi.baidu.com/firstm25/item/620a35f46d778714d7ff8cba

Xilkernel是Xilinx公司提供的用於EDK系統的小型、模塊化的操作系統,支持MicroBlaze、PowerPC405以及PowerPC440處理器。支持可移植操作系統接口(POSIX)。

Xilkernel功能函數包括:線程管理、信號量、消息隊列、共享內存、互斥鎖、動態內存管理、軟件定時、用戶層中斷處理API等幾個方面。

-------------------------------------------------------------

1、線程管理包括如下API函數

Xilkernel支持基本的POSIX線程操作,需要配合線程設置共同作用。使用該類函數需要包含頭文件pthread.h。

int pthread_create(pthread_t thread, pthread_attr_t* att, void*(*start_func)(void*),void* param)
參數:thread是存儲線程ID的地址,attr存儲線程屬性結構體的地址,start_func線程函數名,param線程函數參數指針。
返回:0創建成功,-1線程ID無效,EINVAL無效屬性,EAGAIN資源不足
創建線程並執行。

void pthread_exit(void *value_ptr)
參數:線程返回值的指針
結束一個線程,但這個函數並不是必須的。需要用到返回值時才使用。

int pthread_join(pthread_t thread, void **value_ptr)
參數:thread線程ID,value_ptr線程返回值地址指針
返回:0成功,ESRCH無效線程,EINVAL線程返回值已經被使用
停止當前線程等待目標線程執行完成並返回值。

pthread_t pthread_self(void)
返回:本線程ID

int pthread_detach(pthread_t target)
返回:0成功,ESRCH線程未創建
回收線程存儲資源,但並不會結束線程。

int pthread_equal(pthread_t t1, pthread_t t2)
參數:t1和t2兩個待比較線程的ID
返回:1兩線程是同一線程,0其它情況

int pthread_getschedparam(pthread_t thread, int *policy, struct sched_param *param)
參數:thread線程ID,policy全局調度策略指針,param調度策略結構體地址
返回:0成功,ESRCH線程無效,EINVAL調度參數無效
函數返回個別線程的調度策略。

int pthread_setschedparam(pthread_t thread, int policy, const struct sched_param *param)
參數:thread線程ID,policy忽略,param調度策略結構體地址
返回:0成功,ESRCH線程無效,EINVAL調度參數無效
函數返回個別線程的調度策略。

int pthread_attr_init(pthread_attr_t* attr)
參數:線程屬性指針
返回:0成功,1未成功,EINVAL屬性無效
按照默認設置初始化線程屬性對象attr

int pthread_attr_destroy (pthread_attr_t* attr)
參數:線程屬性指針
返回:0成功,EINVAL錯誤
函數銷燬線程指針對象,設置成未定義值。

int pthread_attr_setdetachstate(pthread_attr_t* attr, int dstate)
參數:attr屬性結構體,dstate要設置的狀態
返回:0成功,EINVAL無效參數
設置線程狀態

int pthread_attr_getdetachstate(pthread_attr_t* attr, int *dstate)
參數:attr屬性結構體,dstate獲取的狀態地址
返回:0成功,EINVAL無效參數
獲取線程狀態:PTHREAD_CREATE_DETACHED或者PTHREAD_CREATE_JOINABLE

int pthread_attr_setschedparam(pthread_attr_t* attr, struct sched_param *schedpar)
參數:attr屬性結構體,schedpar調度參數存儲地址
返回:0成功,EINVAL無效參數,ENOTSUP無效調度參數
設置線程優先級,sched_param在sched.h文件中定義

int pthread_attr_getschedparam(pthread_attr_t* attr, struct sched_param* schedpar)
參數:attr屬性結構體,schedpar線程調度參數指針
返回:0成功,EINVAL無效參數
獲取線程優先級。

int pthread_attr_setstack(const pthread_attr_t *attr, void *stackaddr, size_t stacksize)
參數:attr屬性結構體,stacksize堆棧地址
返回:0成功,EINVAL堆棧設置不當
設置線程堆棧

int pthread_attr_getstack(const pthread_attr_t *attr, void **stackaddr, size_t *stacksize)
參數:attr屬性結構體,stackaddr堆棧地址指針,stacksize堆棧空間以字節爲單位
返回:0成功,EINVAL無效屬性
獲取線程的堆棧信息

pid_t get_currentPID(void)
返回:當前正在運行的線程或操作的ID

int kill(pid_t pid)
參數:pid線程或操作ID
返回:0成功,-1未成功
終止指定線程或操作

int process_status(pid_t pid, p_stat *ps)
參數:pid操作或線程ID,ps狀態存儲地址
返回:無
獲取當前正在運行的縣城或操作的狀態

int xmk_add_static_thread(void* (*start_routine)(void *), int sched_priority)
參數:start_routine線程函數,sched_priority優先級
返回:0成功,-1未成功
該函數將線程加入到啓動或靜態線程列表中,這個函數要在xilkernel_main()函數之前調用

int yield(void)
迫使處理器運行下一個準備好的線程或操作,當前線程或操作今日任務準備完畢隊列,等待再次獲取時間片運行。

-------------------------------------------------------------

2、信號量包括API函數如下

Xilkernel支持信號量操作,信號量提供高速的任務間同比和互斥機制,遵循POSIX。Xilkernel的信號量分爲有名信號量和無名信號量量化總。有名信號量基於文件系統實現,無名信號量基於內存實現。信號量是實現進程間通信(IPC)的重要手段,使用該類函數需要包含頭文件semaphore.h。

int sem_init(sem_t *sem, int pshared, unsigned value)
參數:sem信號量ID,pshared共享狀態,value初始值
返回:0成功,-1未成功。
初始化一個信號量,並初始化信號量的值,適用於無名信號量。

int sem_destroy(sem_t* sem)
參數:sem信號量ID
返回:0成功,-1未成功
釋放一個信號量資源,適用於無名信號量

int sem_getvalue(sem_t* sem, int* value)
參數:sem信號量ID,value獲取值地址
返回:0成功,-1未成功
獲取信號量當前值

int sem_wait(sem_t* sem)
參數:sem信號量ID
返回:0成功,-1未成功
等待信號量的值大於0,並將信號量值減1。執行對信號量的鎖操作

int sem_trywait(sem_t* sem)
參數:sem信號量ID
返回:0成功,-1未成功
功能與sem_trywait()函數相同,但不阻塞進程。

int sem_timedwait(sem_t* sem, unsigned ms)
參數:sem信號量ID,ms定時器時間
返回:0成功,-1未成功
功能與sem_trywait()函數相同,等待信號量大於0過程中,通過定時器超時來停止阻塞進程。

sem_t* sem_open(const char* name, int oflag,...)
參數:name信號量對象的字符串名,oflag控制信號量創建的標識
返回:創建的或已存在的信號量ID
創建一個信號量,適用於有名的信號量

int sem_close(sem_t* sem)
參數:sem信號量ID
返回:0成功,-1未成功
關閉信號量,適用於有名信號量

int sem_post(sem_t* sem)
參數:sem信號量ID
返回:0成功,-1未成功
增加信號量的值,執行該函數爲制定信號量的值加1

int sem_unlink(const char* name)
參數:name信號量名
返回:0成功,-1未成功
移除信號量,適用於有名信號量

-------------------------------------------------------------

3、消息隊列包含API函數如下

Xilkernel實現進程間同學(IPC)的另一重要手段是消息隊列,使用該類函數需要包含文件sys/msg.h和sys/ipc.h

int msgget(key_t key, int msgflg)
參數:key消息隊列的隊列標識,msgflg消息隊列創建選項
返回:唯一且非負的消息隊列ID
穿件消息隊列

int msgctl(int msqid, int cmd, struct msqid_ds* buf)
參數:msqid消息隊列ID,cmd命令,buf數據指針
返回:0成功,-1未成功
以命令控制消息隊列

int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg)
參數:msqid消息隊列ID,magp消息緩存指針,msgsz消息大小,msgflg消息發送選項
返回:0成功,-1未成功
向消息隊列發送一個消息

ssize_t msgrcv(int msqid, void *msgp, size_t nbytes, long msgtyp, int msgflg)
參數:msqid消息隊列ID,msgp複製接收的消息存放地址,nbytes指定接收消息的緩存大小,msgtyp不支持,msgflg控制接收消息操作
返回:接收到的字節數,-1不成功

-------------------------------------------------------------

4、共享內存包含API函數

共享內存是速度最快、效率最高的IPC方式,其基本原理是各進程把相同的內存映射到自己的地址空間,使它看起來好像同時爲同一物理內存被多個進程所用。使用該類函數需要包含頭文件sys/shm.h和sys/ipc.h

int shmget(key_t key, size_t size, int shmflg)
參數:key共享內存標識,size共享內存大小,shmflg創建選項
返回:非負唯一的共享內存ID,-1未成功
獲取共享內存的ID

int shmctl(int shmid, int cmd, struct shmid_ds *buf)
參數:shmid共享內存ID,cmd命令,buf狀態接收緩存
返回:0成功,-1未成功
實現對共享內存的控制操作

void* shmat(int shmid, const void *shmaddr, int flag)
參數:shmid共享內存ID,shmaddr未用,flag設置共享內存附屬選項
返回:共享內存的起始地址,NULL未成功
把共享內存映射到調用該函數的地址空間,方便進程對其訪問

int shm_dt(void *shmaddr)
參數:shmaddr共享內存地址
返回:0成功,-1未成功
解除進程對共享內存的映射

-------------------------------------------------------------

5、互斥鎖包含API函數

在多線程程序中,通過互斥鎖來保護共享數據是一種比較常用的方式。使用該類函數需要包含頭文件pthread.h

int pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutexattr_t* attr)
參數:mutex互斥鎖ID地址,attr互斥鎖創建屬性結構體
返回:0成功返回ID到地址中,EAGAIN資源不足
初始化互斥鎖

int pthread_mutex_destroy(pthread_mutex_t* mutex)
參數:mutex互斥鎖ID
返回:0成功,EINVAL無效ID
釋放互斥資源,執行該函數後,互斥資源變爲未初始化狀態。

int pthread_mutex_lock(pthread_mutex_t* mutex)
參數:mutex互斥鎖ID
返回:0成功鎖定,-1未成功
枷鎖操作,某個線程調用該函數爲互斥鎖資源枷鎖,保證操作時其它線程不能訪問這個資源。如果資源已被鎖定,則阻塞調用。

int pthread_mutex_trylock(pthread_mutex_t* mutex)
參數:mutex互斥鎖ID
返回:0成功,EINVAL無效ID,EBUSY資源已被鎖定,-1其它錯誤
嘗試鎖定資源,若資源未被鎖定則成功返回,若資源已被鎖定,也不會阻塞調用

int pthread_mutex_unlock(pthread_mutex_t* mutex)
參數:mutex互斥鎖ID
返回:0成功,EINVAL無效ID,-1其它錯誤
解鎖互斥資源

int pthread_mutexattr_init(pthread_mutexattr_t* attr)
參數:attr屬性結構體地址
返回:0成功,EINVAL無效屬性
初始化互斥資源的屬性

int pthread_mutexattr_destroy(pthread_mutexattr_t* attr)
參數:attr屬性結構體
返回:0成功,EINVAL無效屬性
拆除互斥資源的屬性,使得互斥資源的屬性變爲未初始化狀態

int pthread_mutexattr_settype(pthread_mutexattr_t* attr, int type)
參數:attr屬性結構體,type互斥鎖類型
返回:0成功,EINVAL無效屬性或類型不支持
在共享資源的屬性中設置資源類型

int pthread_mutexattr_gettype(pthread_mutexattr_t* attr, int *type)
參數:attr屬性結構體,type類型存儲地址
返回:0成功,EINVAL無效屬性
獲取屬性中的資源類型

-------------------------------------------------------------

6、動態內存管理包含API函數

動態內存管理,是Xilkernel提供的一種內存管理接口,類似標準C語言中的malloc、free等函數執行的功能,但更簡潔高效。使用該類函數要包含頭文件sys/bufmalloc.h

int bufcreate(membuf_t *mbuf, void *memptr, int nblks, size_t blksiz)
參數:mbuf緩衝池ID地址,memptr可用緩衝池,nblks緩衝池內存儲塊數量,blksiz每個存儲塊字節數
返回:0成功並存儲緩衝池ID,-1錯誤
建立一個緩衝池

int bufdestroy(membuf_t mbuf)
參數:mbuf緩衝池ID
返回:0成功,-1錯誤
拆除一個緩衝池

void* bufmalloc(membuf_t mbuf, size_t size)
參數:mbuf緩衝池ID,size所需內存塊大小
返回:申請到的內存起始地址,NULL未成功
從緩衝池中申請一塊內存

void buffree(membuf_t mbuf, void* mem)
參數:mbuf緩衝池ID,mem內存塊地址
釋放指定的內存,釋放後內存回到緩衝池,等待其他線程申請

-------------------------------------------------------------

7、軟件定時包含API函數

Xilkernel提供了軟件定時器接口函數,方便用戶訪問軟件計時器。使用該類函數需要包含頭文件sys/timer.h

unsigned int xget_clock_ticks()
返回:節拍數
獲取Xilkernel啓動到該函數調用之間的時間節拍數

time_t time(time_t *timer)
參數:timer存儲被要求的時間信息
返回:秒數
獲取Xilkernel啓動到該函數調用之間的時間秒數

unsigned sleep(unsigned int ms)
參數:ms毫秒數
返回:休眠間秒數
休眠進程(毫秒數)

-------------------------------------------------------------

8、用戶中斷API函數

unsigned int register_int_handler(int_id_t id, void *(handler)(void*), void *callback)
參數:id中斷號;handler用戶定義中斷處理函數;callback是handler的參數
返回:XST_SUCCESS表示成功,其它表示出錯(詳見xstatus.h文件)
註冊用戶中斷函數關聯

void unregister_int_handler(int_id_t id)
參數:id中斷號
取消用戶中斷函數關聯

void enable_interrupt(int_id_t id)
參數:中斷號
在中斷控制器中使能對應中斷

void disable_interrupt(int_id_t id)
參數:中斷號
在中斷控制器中禁止對應中斷

void acknowledge_interrupt(int_id_t id)
參數:中斷號
在中斷控制器中應答對應中斷

-------------------------------------------------------------

發佈了11 篇原創文章 · 獲贊 37 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章