Преглед на файлове

[sleep] 加入调度器尚未运行时的延时情况

Meco Man преди 3 години
родител
ревизия
6697fa0ff5
променени са 1 файла, в които са добавени 16 реда и са изтрити 8 реда
  1. 16 8
      components/libc/compilers/common/unistd.c

+ 16 - 8
components/libc/compilers/common/unistd.c

@@ -37,19 +37,26 @@ RTM_EXPORT(isatty);
 
 char *ttyname(int fd)
 {
-    return "/dev/tty"; /*TODO: need to add more specific*/
+    return "/dev/tty"; /* TODO: need to add more specific */
 }
 RTM_EXPORT(ttyname);
 
 unsigned int sleep(unsigned int seconds)
 {
-    rt_tick_t delta_tick;
-
-    delta_tick = rt_tick_get();
-    rt_thread_delay(seconds * RT_TICK_PER_SECOND);
-    delta_tick = rt_tick_get() - delta_tick;
+    if (rt_thread_self() != RT_NULL)
+    {
+        rt_thread_delay(seconds * RT_TICK_PER_SECOND);
+    }
+    else /* scheduler has not run yet */
+    {
+        while(seconds > 0)
+        {
+            rt_hw_us_delay(1000000u);
+            seconds --;
+        }
+    }
 
-    return seconds - delta_tick/RT_TICK_PER_SECOND;
+    return 0;
 }
 RTM_EXPORT(sleep);
 
@@ -59,11 +66,12 @@ int usleep(useconds_t usec)
     {
         rt_thread_mdelay(usec / 1000u);
     }
-    else
+    else  /* scheduler has not run yet */
     {
         rt_hw_us_delay(usec / 1000u);
     }
     rt_hw_us_delay(usec % 1000u);
+
     return 0;
 }
 RTM_EXPORT(usleep);