fs_x_ucos_ii.c
上传用户:yj_qqy
上传日期:2017-01-28
资源大小:2911k
文件大小:9k
源码类别:

uCOS

开发平台:

C/C++

  1. /*
  2. *********************************************************************************************************
  3. *                                             Micrium, Inc.
  4. *                                         949 Crestview Circle
  5. *                                        Weston,  FL 33327-1848
  6. *
  7. *                                         OS Layer for uC/FS
  8. *
  9. *                                   (c) Copyright 2002, Micrium, Inc.
  10. *                                          All rights reserved.
  11. *
  12. * Filename    : fs_x_ucos_ii.C
  13. * Programmers : Jean J. Labrosse
  14. *********************************************************************************************************
  15. */
  16. /*
  17. *********************************************************************************************************
  18. *                                            INCLUDE FILES
  19. *********************************************************************************************************
  20. */
  21. #include  "fs_port.h"
  22. #include  "fs_dev.h"
  23. #include  "fs_api.h"
  24. #include  "fs_os.h"
  25. #include  "fs_conf.h"
  26. #if FS_OS_TIME_SUPPORT == 1
  27. #include  <time.h>
  28. #endif
  29. #include  "includes.h"
  30. /*
  31. *********************************************************************************************************
  32. *                                         LOCAL GLOBAL VARIABLES
  33. *********************************************************************************************************
  34. */
  35. static  OS_EVENT  *FS_SemFileHandle;
  36. static  OS_EVENT  *FS_SemFileOps;
  37. static  OS_EVENT  *FS_SemMemManager;
  38. static  OS_EVENT  *FS_SemDeviceOps;
  39. #if FS_POSIX_DIR_SUPPORT
  40. static OS_EVENT   *FS_SemDirHandle;
  41. static OS_EVENT   *FS_SemDirOps;
  42. #endif  /* FS_POSIX_DIR_SUPPORT */
  43. /*$PAGE*/
  44. /*
  45. *********************************************************************************************************
  46. *                              Lock global table _FS_filehandle (fs_info.c)
  47. *********************************************************************************************************
  48. */
  49. void  FS_X_OS_LockFileHandle (void) 
  50. {
  51.     INT8U  err;
  52.     OSSemPend(FS_SemFileHandle, 0, &err);
  53. }
  54. /*
  55. *********************************************************************************************************
  56. *                              Unlock global table _FS_filehandle (fs_info.c)
  57. *********************************************************************************************************
  58. */
  59. void  FS_X_OS_UnlockFileHandle (void) 
  60. {
  61.     OSSemPost(FS_SemFileHandle);
  62. }
  63. /*
  64. *********************************************************************************************************
  65. *                                          Lock File Operations
  66. *********************************************************************************************************
  67. */
  68. void  FS_X_OS_LockFileOp (FS_FILE *fp) 
  69. {
  70.     INT8U  err;
  71.     OSSemPend(FS_SemFileOps, 0, &err);
  72. }
  73. /*
  74. *********************************************************************************************************
  75. *                                         Unlock File Operations
  76. *********************************************************************************************************
  77. */
  78. void  FS_X_OS_UnlockFileOp (FS_FILE *fp) 
  79. {
  80.     OSSemPost(FS_SemFileOps);
  81. }
  82. /*$PAGE*/
  83. /*
  84. *********************************************************************************************************
  85. *                                        Lock the Memory Manager
  86. *********************************************************************************************************
  87. */
  88. void  FS_X_OS_LockMem (void)
  89. {
  90.     INT8U  err;
  91.     OSSemPend(FS_SemMemManager, 0, &err);
  92. }
  93. /*
  94. *********************************************************************************************************
  95. *                                       Unlock the Memory Manager
  96. *********************************************************************************************************
  97. */
  98. void  FS_X_OS_UnlockMem (void) 
  99. {
  100.     OSSemPost(FS_SemMemManager);
  101. }
  102. /*
  103. *********************************************************************************************************
  104. *                                        Lock Device Operations
  105. *********************************************************************************************************
  106. */
  107. void  FS_X_OS_LockDeviceOp (const FS__device_type *driver, FS_u32 id) 
  108. {
  109.     INT8U  err;
  110.     OSSemPend(FS_SemDeviceOps, 0, &err);
  111. }
  112. /*
  113. *********************************************************************************************************
  114. *                                       Unlock Device Operations
  115. *********************************************************************************************************
  116. */
  117. void  FS_X_OS_UnlockDeviceOp (const FS__device_type *driver, FS_u32 id) 
  118. {
  119.     OSSemPost(FS_SemDeviceOps);
  120. }
  121. #if FS_POSIX_DIR_SUPPORT
  122. /*
  123. *********************************************************************************************************
  124. *                              Lock global table _FS_dirhandle (api_dir.c).
  125. *********************************************************************************************************
  126. */
  127. void FS_X_OS_LockDirHandle (void)
  128. {
  129.     INT8U  err;
  130.     OSSemPend(FS_SemDirHandle, 0, &err);
  131. }
  132. /*
  133. *********************************************************************************************************
  134. *                              Unlock global table _FS_dirhandle (api_dir.c).
  135. *********************************************************************************************************
  136. */
  137. void FS_X_OS_UnlockDirHandle (void)
  138. {
  139.     OSSemPost(FS_SemDirHandle);
  140. }
  141. /*
  142. *********************************************************************************************************
  143. *                                          Lock Directory Operations
  144. *********************************************************************************************************
  145. */
  146. void FS_X_OS_LockDirOp (FS_DIR *dirp)
  147. {
  148.     INT8U  err;
  149.     OSSemPend(FS_SemDirOps, 0, &err);
  150. }
  151. /*
  152. *********************************************************************************************************
  153. *                                          Unlock Directory Operations
  154. *********************************************************************************************************
  155. */
  156. void FS_X_OS_UnlockDirOp (FS_DIR *dirp) 
  157. {
  158.     OSSemPost(FS_SemDirOps);
  159. }
  160. #endif  /* FS_POSIX_DIR_SUPPORT */
  161. /*$PAGE*/
  162. /*
  163. *********************************************************************************************************
  164. *                                              Get Date
  165. *********************************************************************************************************
  166. */
  167. FS_u16  FS_X_OS_GetDate (void) 
  168. {
  169. #if FS_OS_TIME_SUPPORT == 1
  170.     FS_u16      fdate;
  171.     time_t      t;
  172.     struct tm  *ltime;
  173.     time(&t);
  174.     ltime  = localtime(&t);
  175.     fdate  = ltime->tm_mday;
  176.     fdate += ((FS_u16)(ltime->tm_mon  +  1) << 5);
  177.     fdate += ((FS_u16)(ltime->tm_year - 80) << 9);
  178. #else
  179.     FS_u16      fdate;
  180.     fdate  = 1;
  181.     fdate += ((FS_u16) 1 << 5);
  182.     fdate += ((FS_u16) 0 << 9);
  183. #endif
  184.     return (fdate);
  185. }
  186. /*
  187. *********************************************************************************************************
  188. *                                              Get Time
  189. *********************************************************************************************************
  190. */
  191. FS_u16  FS_X_OS_GetTime (void) 
  192. {
  193. #if FS_OS_TIME_SUPPORT == 1
  194.     FS_u16      ftime;
  195.     time_t      t;
  196.     struct tm  *ltime;
  197.     time(&t);
  198.     ltime  = localtime(&t);
  199.     ftime  = ltime->tm_sec / 2;
  200.     ftime += ((FS_u16) ltime->tm_min  <<  5);
  201.     ftime += ((FS_u16) ltime->tm_hour << 11);
  202. #else
  203.     FS_u16 ftime;
  204.     ftime  = 0;
  205. #endif
  206.     return (ftime);
  207. }
  208. /*$PAGE*/
  209. /*
  210. *********************************************************************************************************
  211. *                                         Initialize OS Resources
  212. *********************************************************************************************************
  213. */
  214. int  FS_X_OS_Init (void) 
  215. {
  216.     FS_SemFileHandle = OSSemCreate(1);
  217.     FS_SemFileOps    = OSSemCreate(1);
  218.     FS_SemMemManager = OSSemCreate(1);
  219.     FS_SemDeviceOps  = OSSemCreate(1);
  220. #if FS_POSIX_DIR_SUPPORT    
  221.     FS_SemDirHandle  = OSSemCreate(1);
  222.     FS_SemDirOps     = OSSemCreate(1);
  223. #endif  /* FS_POSIX_DIR_SUPPORT */    
  224.     return (0);
  225. }
  226. /*
  227. *********************************************************************************************************
  228. *                                         Reclaim OS Resources
  229. *********************************************************************************************************
  230. */
  231. int  FS_X_OS_Exit (void) 
  232. {
  233.     INT8U  err;
  234.     OSSemDel(FS_SemFileHandle, OS_DEL_ALWAYS, &err);
  235.     OSSemDel(FS_SemFileOps   , OS_DEL_ALWAYS, &err);
  236.     OSSemDel(FS_SemMemManager, OS_DEL_ALWAYS, &err);
  237.     OSSemDel(FS_SemDeviceOps , OS_DEL_ALWAYS, &err);
  238. #if FS_POSIX_DIR_SUPPORT    
  239.     OSSemDel(FS_SemDirHandle , OS_DEL_ALWAYS, &err);
  240.     OSSemDel(FS_SemDirOps    , OS_DEL_ALWAYS, &err);
  241. #endif  /* FS_POSIX_DIR_SUPPORT */
  242.     return (0);
  243. }