os_api.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. #ifndef OS_API_H
  2. #define OS_API_H
  3. #ifdef __cplusplus
  4. extern "C"
  5. {
  6. #endif
  7. #include "generic/typedef.h"
  8. //#include "generic/list.h"
  9. #include "os/os_cpu.h"
  10. #include "os/os_error.h"
  11. #include "os/os_type.h"
  12. typedef void *TaskHandle_t;
  13. #define Q_MSG 0x100000
  14. #define Q_EVENT 0x200000
  15. #define Q_CALLBACK 0x300000
  16. #define Q_USER 0x400000
  17. #define OS_DEL_NO_PEND 0u
  18. #define OS_DEL_ALWAYS 1u
  19. #define OS_TASK_DEL_REQ 0x01u
  20. #define OS_TASK_DEL_RES 0x02u
  21. #define OS_TASK_DEL_OK 0x03u
  22. #define OS_TASK_SELF (char *)0x1
  23. #define OS_TASK_FATHER (char *)0x2
  24. /* --------------------------------------------------------------------------*/
  25. /**
  26. * @brief reserved
  27. */
  28. /* ----------------------------------------------------------------------------*/
  29. void os_init(void);
  30. /* --------------------------------------------------------------------------*/
  31. /**
  32. * @brief reserved
  33. */
  34. /* ----------------------------------------------------------------------------*/
  35. void os_start(void);
  36. /* --------------------------------------------------------------------------*/
  37. /**
  38. * @brief reserved
  39. */
  40. /* ----------------------------------------------------------------------------*/
  41. void os_init_tick(int);
  42. /* --------------------------------------------------------------------------*/
  43. /**
  44. * @brief 创建任务
  45. *
  46. * @param task 任务回调函数
  47. * @param p_arg 传递给任务回调函数的参数
  48. * @param prio 任务的优先级
  49. * @param stksize 任务的堆栈大小, 单位(u32)
  50. * @param qsize 任务的queue大小,单位(byte)
  51. * @param name 任务名 (名字长度不能超过configMAX_TASK_NAME_LEN字节)
  52. *
  53. * @return 错误码
  54. */
  55. /* ----------------------------------------------------------------------------*/
  56. int os_task_create(void (*task)(void *p_arg),
  57. void *p_arg,
  58. u8 prio,
  59. u32 stksize,
  60. int qsize,
  61. const char *name);
  62. int os_task_create_affinity_core(void (*task)(void *p_arg),
  63. void *p_arg,
  64. u8 prio,
  65. u32 stksize,
  66. int qsize,
  67. const char *name,
  68. u8 core);
  69. /* --------------------------------------------------------------------------*/
  70. /**
  71. * @brief 获取当前任务名
  72. *
  73. * @return 当前任务名
  74. */
  75. /* ----------------------------------------------------------------------------*/
  76. const char *os_current_task();
  77. /* --------------------------------------------------------------------------*/
  78. /**
  79. * @brief 删除任务
  80. *
  81. * @param name 任务名
  82. *
  83. * @return 错误码
  84. */
  85. /* ----------------------------------------------------------------------------*/
  86. int os_task_del_req(const char *name);
  87. /* --------------------------------------------------------------------------*/
  88. /**
  89. * @brief 响应任务删除请求,标记资源已经释放,可以删除当前任
  90. *
  91. * @param name 任务名,任务自己可以用OS_TASK_SELF
  92. *
  93. * @return 错误码
  94. */
  95. /* ----------------------------------------------------------------------------*/
  96. int os_task_del_res(const char *name);
  97. /* --------------------------------------------------------------------------*/
  98. /**
  99. * @brief 删除任务
  100. *
  101. * @param name 任务名
  102. *
  103. * @return 错误码
  104. */
  105. /* ----------------------------------------------------------------------------*/
  106. int os_task_del(const char *name);
  107. /* --------------------------------------------------------------------------*/
  108. /**
  109. * @brief 延时。中断函数或者关闭系统总中断的情况下不能调用此函数
  110. *
  111. * @param time_tick 延时时间
  112. */
  113. /* ----------------------------------------------------------------------------*/
  114. void os_time_dly(int time_tick);
  115. /* --------------------------------------------------------------------------*/
  116. /**
  117. * @brief 发送Q_USER类型taskq
  118. *
  119. * @param name 任务名
  120. * @param argc 后面传入的参数的个数。发送的最大参数个数限制为8个int类型
  121. *
  122. * @return 错误码
  123. */
  124. /* ----------------------------------------------------------------------------*/
  125. int os_taskq_post(const char *name, int argc, ...);
  126. /* --------------------------------------------------------------------------*/
  127. /**
  128. * @brief 非阻塞方式查询taskq
  129. *
  130. * @param argc 最大可获取的queue长度,单位(int)
  131. * @param argv 存放queue的buf
  132. *
  133. * @return 错误码
  134. */
  135. /* ----------------------------------------------------------------------------*/
  136. int os_taskq_accept(int argc, int *argv);
  137. /* --------------------------------------------------------------------------*/
  138. /**
  139. * @brief 阻塞方式获取taskq
  140. *
  141. * @param fmt 保留,传NULL
  142. * @param argv 存放queue的buf
  143. * @param argc 最大可获取的queue长度,单位(int)
  144. *
  145. * @return 错误码
  146. */
  147. /* ----------------------------------------------------------------------------*/
  148. int os_taskq_pend(const char *fmt, int *argv, int argc);
  149. // int os_task_pend(const char *fmt, int *argv, int argc);
  150. // int __os_taskq_pend(int *argv, int argc, int tick);
  151. /* --------------------------------------------------------------------------*/
  152. /**
  153. * @brief 发送指定类型的taskq
  154. *
  155. * @param name 任务名
  156. * @param type queue类型
  157. * @param argc 后面传入的参数的个数
  158. * @param argv
  159. *
  160. * @return 错误码
  161. */
  162. /* ----------------------------------------------------------------------------*/
  163. int os_taskq_post_type(const char *name, int type, int argc, int *argv);
  164. /* --------------------------------------------------------------------------*/
  165. /**
  166. * @brief 发送Q_MSG类型的taskq
  167. *
  168. * @param name 任务名
  169. * @param argc 后面参数的个数
  170. *
  171. * @reutrn 错误码
  172. */
  173. /* ----------------------------------------------------------------------------*/
  174. int os_taskq_post_msg(const char *name, int argc, ...);
  175. /* --------------------------------------------------------------------------*/
  176. /**
  177. * @brief 发送Q_EVENT类型的taskq
  178. *
  179. * @param name 任务名
  180. * @param argc 后面参数的个数
  181. *
  182. * @reutrn 错误码
  183. */
  184. /* ----------------------------------------------------------------------------*/
  185. int os_taskq_post_event(const char *name, int argc, ...);
  186. /* --------------------------------------------------------------------------*/
  187. /**
  188. * @brief 删除指定类型的taskq
  189. *
  190. * @param name 任务名
  191. * @param type taskq的类型
  192. *
  193. * @reutrn 错误码
  194. */
  195. /* ----------------------------------------------------------------------------*/
  196. int os_taskq_del_type(const char *name, int type);
  197. /* --------------------------------------------------------------------------*/
  198. /**
  199. * @brief 清除所有taskq
  200. *
  201. * @reutrn 错误码
  202. */
  203. /* ----------------------------------------------------------------------------*/
  204. int os_taskq_flush(void);
  205. /* --------------------------------------------------------------------------*/
  206. /**
  207. * @brief 创建信号量
  208. *
  209. * @param sem 信号量
  210. * @param int 初始计数值
  211. *
  212. * @reutrn 错误码
  213. */
  214. /* ----------------------------------------------------------------------------*/
  215. int os_sem_create(OS_SEM *, int);
  216. /* --------------------------------------------------------------------------*/
  217. /**
  218. * @brief 非阻塞方式查询信号量
  219. *
  220. * @param sem 信号量
  221. *
  222. * @reutrn 错误码
  223. */
  224. /* ----------------------------------------------------------------------------*/
  225. int os_sem_accept(OS_SEM *);
  226. /* --------------------------------------------------------------------------*/
  227. /**
  228. * @brief 阻塞方式获取信号量
  229. *
  230. * @param sem 信号量
  231. * @param timeout 等待时长,0表示一直等待
  232. *
  233. * @reutrn 错误码
  234. */
  235. /* ----------------------------------------------------------------------------*/
  236. int os_sem_pend(OS_SEM *, int timeout);
  237. /* --------------------------------------------------------------------------*/
  238. /**
  239. * @brief 发送信号量
  240. *
  241. * @param sem 信号量
  242. *
  243. * @reutrn 错误码
  244. */
  245. /* ----------------------------------------------------------------------------*/
  246. int os_sem_post(OS_SEM *);
  247. /* --------------------------------------------------------------------------*/
  248. /**
  249. * @brief 信号量删除
  250. *
  251. * @param sem 信号量
  252. * @param block 保留
  253. *
  254. * @reutrn 错误码
  255. */
  256. /* ----------------------------------------------------------------------------*/
  257. int os_sem_del(OS_SEM *, int block);
  258. /* --------------------------------------------------------------------------*/
  259. /**
  260. * @brief 信号量设置
  261. *
  262. * @param sem 信号量
  263. * @param cnt 计数值
  264. *
  265. * @reutrn 错误码
  266. */
  267. /* ----------------------------------------------------------------------------*/
  268. int os_sem_set(OS_SEM *, u16 cnt);
  269. /* --------------------------------------------------------------------------*/
  270. /**
  271. * @brief 信号量类型是否queueQUEUE_TYPE_COUNTING_SEMAPHORE
  272. *
  273. * @param true:信号量匹配, fail:信号量不匹配
  274. *
  275. * @reutrn 错误码
  276. */
  277. /* ----------------------------------------------------------------------------*/
  278. int os_sem_valid(OS_SEM *);
  279. /* --------------------------------------------------------------------------*/
  280. /**
  281. * @brief 判断信号量是否可用
  282. *
  283. * @param sem 信号量
  284. *
  285. * @reutrn 可用数量
  286. */
  287. /* ----------------------------------------------------------------------------*/
  288. int os_sem_query(OS_SEM *);
  289. /* --------------------------------------------------------------------------*/
  290. /**
  291. * @brief 创建互斥量
  292. *
  293. * @param mutex 互斥量
  294. *
  295. * @reutrn 错误码
  296. */
  297. /* ----------------------------------------------------------------------------*/
  298. int os_mutex_create(OS_MUTEX *);
  299. /* --------------------------------------------------------------------------*/
  300. /**
  301. * @brief 非阻塞方式查询互斥量
  302. *
  303. * @param mutex:互斥量
  304. *
  305. * @reutrn 错误码
  306. */
  307. /* ----------------------------------------------------------------------------*/
  308. int os_mutex_accept(OS_MUTEX *);
  309. /* --------------------------------------------------------------------------*/
  310. /**
  311. * @brief 阻塞方式查询互斥量
  312. *
  313. * @param mutex 互斥量
  314. * @param timeout 等待时间,0表示一直等待
  315. *
  316. * @reutrn 错误码
  317. */
  318. /* ----------------------------------------------------------------------------*/
  319. int os_mutex_pend(OS_MUTEX *, int timeout);
  320. /* --------------------------------------------------------------------------*/
  321. /**
  322. * @brief 发送斥量
  323. *
  324. * @param mutex 互斥量
  325. *
  326. * @reutrn 错误码
  327. */
  328. /* ----------------------------------------------------------------------------*/
  329. int os_mutex_post(OS_MUTEX *);
  330. /* --------------------------------------------------------------------------*/
  331. /**
  332. * @brief 删除斥量
  333. *
  334. * @param mutex 互斥量
  335. * @param block 保留
  336. *
  337. * @reutrn 错误码
  338. */
  339. /* ----------------------------------------------------------------------------*/
  340. int os_mutex_del(OS_MUTEX *, int block);
  341. /* --------------------------------------------------------------------------*/
  342. /**
  343. * @brief 互斥量类型是否queueQUEUE_TYPE_MUTEX
  344. *
  345. * @param true:互斥量匹配, fail:互斥量不匹配
  346. *
  347. * @reutrn 错误码
  348. */
  349. /* ----------------------------------------------------------------------------*/
  350. int os_mutex_valid(OS_MUTEX *);
  351. /*struct os_msg *os_message_create(int size);
  352. int os_message_receive(struct os_msg **msg, int block_time);
  353. int os_message_send(const char *task_name, struct os_msg *msg, int msgflg);
  354. int os_message_delete(struct os_msg *msg);*/
  355. int os_q_create(OS_QUEUE *pevent, /*void **start, */QS size);
  356. int os_q_del(OS_QUEUE *pevent, u8 opt);
  357. int os_q_flush(OS_QUEUE *pevent);
  358. int os_q_pend(OS_QUEUE *pevent, int timeout, void *msg);
  359. int os_q_post(OS_QUEUE *pevent, void *msg);
  360. int os_q_query(OS_QUEUE *pevent);
  361. int os_q_valid(OS_QUEUE *pevent);
  362. int task_queue_post_event(const char *name, void *data, int len);
  363. void *os_task_get_handle(const char *name);
  364. void os_suspend_other_core(void);
  365. void os_resume_other_core(void);
  366. void os_system_info_output(void);
  367. #ifdef __cplusplus
  368. }
  369. #endif
  370. #endif