application.c 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. /*
  2. * File : application.c
  3. * This file is part of RT-Thread RTOS
  4. * COPYRIGHT (C) 2006, RT-Thread Development Team
  5. *
  6. * The license and distribution terms for this file may be
  7. * found in the file LICENSE in this distribution or at
  8. * http://www.rt-thread.org/license/LICENSE
  9. *
  10. * Change Logs:
  11. * Date Author Notes
  12. * 2009-01-05 Bernard the first version
  13. */
  14. #include <rtthread.h>
  15. #include <stdio.h>
  16. #include <board.h>
  17. /* fix the compile errors for redefiniton of lwip_htonl in win socket */
  18. #ifdef _WIN32
  19. #undef RT_USING_LWIP
  20. #include <components.h>
  21. #endif
  22. void rt_init_thread_entry(void *parameter)
  23. {
  24. #ifdef RT_USING_LWIP
  25. extern void pcap_netif_hw_init(void);
  26. pcap_netif_hw_init();
  27. #endif
  28. /* initialization RT-Thread Components */
  29. rt_components_init();
  30. rt_platform_init();
  31. /* Filesystem Initialization */
  32. #ifdef RT_USING_DFS
  33. {
  34. #ifdef RT_USING_DFS_WINSHAREDIR
  35. {
  36. extern rt_err_t rt_win_sharedir_init(const char *name);
  37. extern int dfs_win32_init(void);
  38. rt_win_sharedir_init("wdd");
  39. dfs_win32_init();
  40. if (dfs_mount("wdd", "/", "wdir", 0, 0) == 0)
  41. rt_kprintf("win32 share directory initialized!\n");
  42. else
  43. rt_kprintf("win32 share directory initialized failed!\n");
  44. }
  45. #endif
  46. #ifdef RT_USING_DFS_ELMFAT
  47. /* mount sd card fat partition 1 as root directory */
  48. if (dfs_mount("sd0", "/disk/sd", "elm", 0, 0) == 0)
  49. {
  50. rt_kprintf("fatfs initialized!\n");
  51. }
  52. else
  53. rt_kprintf("fatfs initialzation failed!\n");
  54. #endif
  55. #ifdef RT_USING_DFS_UFFS
  56. /* mount sd card fat partition 1 as root directory */
  57. if (dfs_mount("nand0", "/disk/nand", "uffs", 0, 0) == 0)
  58. {
  59. rt_kprintf("uffs initialized!\n");
  60. }
  61. else
  62. rt_kprintf("uffs initialzation failed!\n");
  63. #endif
  64. #ifdef RT_USING_DFS_JFFS2
  65. /* mount sd card fat partition 1 as root directory */
  66. if (dfs_mount("nor", "/disk/nor", "jffs2", 0, 0) == 0)
  67. {
  68. rt_kprintf("jffs2 initialized!\n");
  69. }
  70. else
  71. rt_kprintf("jffs2 initialzation failed!\n");
  72. #endif
  73. }
  74. #endif
  75. #ifdef WIN32
  76. {
  77. extern void low_cpu(void);
  78. rt_thread_idle_sethook(low_cpu);
  79. }
  80. #endif
  81. #if 0
  82. {
  83. extern void application_init(void);
  84. rt_thread_delay(RT_TICK_PER_SECOND);
  85. application_init();
  86. }
  87. #endif
  88. #if defined(RT_USING_RTGUI)
  89. rt_thread_delay(3000);
  90. realtouch_ui_init();
  91. #endif
  92. }
  93. void rt_test_thread_entry(void *parameter)
  94. {
  95. int i;
  96. for (i = 0; i < 10; i++)
  97. {
  98. rt_kprintf("hello, world\n");
  99. rt_thread_delay(100);
  100. }
  101. }
  102. int rt_application_init()
  103. {
  104. rt_thread_t tid;
  105. tid = rt_thread_create("init",
  106. rt_init_thread_entry, RT_NULL,
  107. 2048, RT_THREAD_PRIORITY_MAX / 3, 20);
  108. if (tid != RT_NULL)
  109. rt_thread_startup(tid);
  110. tid = rt_thread_create("test",
  111. rt_test_thread_entry, RT_NULL,
  112. 2048, RT_THREAD_PRIORITY_MAX * 3 / 4, 20);
  113. if (tid != RT_NULL)
  114. rt_thread_startup(tid);
  115. return 0;
  116. }
  117. #ifdef WIN32
  118. #include <windows.h>
  119. void low_cpu(void)
  120. {
  121. Sleep(1000);
  122. }
  123. #ifndef _CRT_TERMINATE_DEFINED
  124. #define _CRT_TERMINATE_DEFINED
  125. _CRTIMP __declspec(noreturn) void __cdecl exit(__in int _Code);
  126. _CRTIMP __declspec(noreturn) void __cdecl _exit(__in int _Code);
  127. _CRTIMP void __cdecl abort(void);
  128. #endif
  129. void rt_hw_exit(void)
  130. {
  131. rt_kprintf("RT-Thread, bye\n");
  132. exit(0);
  133. }
  134. FINSH_FUNCTION_EXPORT_ALIAS(rt_hw_exit, exit, exit rt-thread);
  135. #endif
  136. #include <dfs_posix.h>
  137. void test_fs(void)
  138. {
  139. int fd;
  140. DIR *dir;
  141. struct dirent *dirp;
  142. off_t off[6];
  143. int i;
  144. mkdir("/testdir", 0777);
  145. fd = open("/testdir/file1", O_CREAT | O_RDWR, 0777);
  146. close(fd);
  147. fd = open("/testdir/file2", O_CREAT | O_RDWR, 0777);
  148. close(fd);
  149. fd = open("/testdir/file3", O_CREAT | O_RDWR, 0777);
  150. close(fd);
  151. fd = open("/testdir/file4", O_CREAT | O_RDWR, 0777);
  152. close(fd);
  153. fd = open("/testdir/file5", O_CREAT | O_RDWR, 0777);
  154. close(fd);
  155. fd = open("/testdir/file6", O_CREAT | O_RDWR, 0777);
  156. close(fd);
  157. dir = opendir("/testdir");
  158. for (i = 0; i < 6; i++)
  159. {
  160. off[i] = telldir(dir);
  161. dirp = readdir(dir);
  162. if (dirp)
  163. rt_kprintf("#%d NAME:%s\n", i, dirp->d_name);
  164. else break;
  165. }
  166. for (i = 0; i < 6; i++)
  167. {
  168. seekdir(dir, off[i]);
  169. dirp = readdir(dir);
  170. if (dirp)
  171. rt_kprintf("#%d NAME:%s\n", i, dirp->d_name);
  172. else break;
  173. }
  174. rt_kprintf("unlink file2\n");
  175. unlink("/testdir/file2");
  176. rewinddir(dir);
  177. for (i = 0; i < 6; i++)
  178. {
  179. off[i] = telldir(dir);
  180. dirp = readdir(dir);
  181. if (dirp)
  182. rt_kprintf("#%d NAME:%s\n", i, dirp->d_name);
  183. else break;
  184. }
  185. for (i = 0; i < 6; i++)
  186. {
  187. seekdir(dir, off[i]);
  188. dirp = readdir(dir);
  189. if (dirp)
  190. rt_kprintf("#%d NAME:%s\n", i, dirp->d_name);
  191. else break;
  192. }
  193. rt_kprintf("unlink file4\n");
  194. unlink("/testdir/file4");
  195. rewinddir(dir);
  196. for (i = 0; i < 6; i++)
  197. {
  198. off[i] = telldir(dir);
  199. dirp = readdir(dir);
  200. if (dirp)
  201. rt_kprintf("#%d NAME:%s\n", i, dirp->d_name);
  202. else break;
  203. }
  204. for (i = 0; i < 6; i++)
  205. {
  206. seekdir(dir, off[i]);
  207. dirp = readdir(dir);
  208. if (dirp)
  209. rt_kprintf("#%d NAME:%s\n", i, dirp->d_name);
  210. else break;
  211. }
  212. unlink("/testdir/file1");
  213. unlink("/testdir/file3");
  214. unlink("/testdir/file5");
  215. unlink("/testdir/file6");
  216. closedir(dir);
  217. }
  218. FINSH_FUNCTION_EXPORT(test_fs, test fs);
  219. /*@}*/