mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-10-28 08:37:57 +08:00
Merge pull request #4333 from mysterywolf/pthread
[pthread][libc][time] 修改pthread与libc的时间函数若干问题
This commit is contained in:
16 files changed
+622
-339
No files matched your search
@@ -111,6 +111,8 @@
|
||||
// <section name="LIBC" description="C Runtime library setting" default="always" >
|
||||
// <bool name="RT_USING_LIBC" description="Using C library" default="true" />
|
||||
#define RT_USING_LIBC
|
||||
// <bool name="RT_USING_POSIX" description="Using POSIX library" default="true" />
|
||||
#define RT_USING_POSIX
|
||||
// <bool name="RT_USING_PTHREADS" description="Using POSIX threads library" default="true" />
|
||||
#define RT_USING_PTHREADS
|
||||
// <bool name="RT_USING_CPLUSPLUS" description="Support C++ programming language" default="true" />
|
||||
@@ -118,7 +120,7 @@
|
||||
// </section>
|
||||
|
||||
// <section name="RT_USING_DFS" description="Device file system" default="true" >
|
||||
//#define RT_USING_DFS
|
||||
#define RT_USING_DFS
|
||||
// <bool name="DFS_USING_WORKDIR" description="Using working directory" default="true" />
|
||||
#define DFS_USING_WORKDIR
|
||||
// <integer name="DFS_FILESYSTEMS_MAX" description="The maximal number of mounted file system" default="4" />
|
||||
|
||||
+281
-34
File diff suppressed because it is too large.
Load diff
+68
-4
@@ -41,7 +41,7 @@
|
||||
#define RT_USING_CONSOLE
|
||||
#define RT_CONSOLEBUF_SIZE 128
|
||||
#define RT_CONSOLE_DEVICE_NAME "uart2"
|
||||
#define RT_VER_NUM 0x40002
|
||||
#define RT_VER_NUM 0x40003
|
||||
|
||||
/* RT-Thread Components */
|
||||
|
||||
@@ -75,6 +75,21 @@
|
||||
#define DFS_FILESYSTEMS_MAX 2
|
||||
#define DFS_FILESYSTEM_TYPES_MAX 2
|
||||
#define DFS_FD_MAX 4
|
||||
#define RT_USING_DFS_ELMFAT
|
||||
|
||||
/* elm-chan's FatFs, Generic FAT Filesystem Module */
|
||||
|
||||
#define RT_DFS_ELM_CODE_PAGE 936
|
||||
#define RT_DFS_ELM_WORD_ACCESS
|
||||
#define RT_DFS_ELM_USE_LFN_0
|
||||
#define RT_DFS_ELM_USE_LFN 0
|
||||
#define RT_DFS_ELM_LFN_UNICODE_0
|
||||
#define RT_DFS_ELM_LFN_UNICODE 0
|
||||
#define RT_DFS_ELM_MAX_LFN 64
|
||||
#define RT_DFS_ELM_DRIVES 2
|
||||
#define RT_DFS_ELM_MAX_SECTOR_SIZE 512
|
||||
#define RT_DFS_ELM_REENTRANT
|
||||
#define RT_USING_DFS_DEVFS
|
||||
|
||||
/* Device Drivers */
|
||||
|
||||
@@ -98,6 +113,7 @@
|
||||
#define RT_USING_LIBC
|
||||
#define RT_USING_PTHREADS
|
||||
#define PTHREAD_NUM_MAX 8
|
||||
#define RT_USING_POSIX
|
||||
|
||||
/* Network */
|
||||
|
||||
@@ -106,9 +122,51 @@
|
||||
|
||||
/* Network interface device */
|
||||
|
||||
#define NETDEV_USING_PING
|
||||
|
||||
/* light weight TCP/IP stack */
|
||||
|
||||
#define RT_USING_LWIP
|
||||
#define RT_USING_LWIP141
|
||||
#define RT_LWIP_MEM_ALIGNMENT 4
|
||||
#define RT_LWIP_IGMP
|
||||
#define RT_LWIP_ICMP
|
||||
#define RT_LWIP_DNS
|
||||
#define RT_LWIP_DHCP
|
||||
#define IP_SOF_BROADCAST 1
|
||||
#define IP_SOF_BROADCAST_RECV 1
|
||||
|
||||
/* Static IPv4 Address */
|
||||
|
||||
#define RT_LWIP_IPADDR "192.168.1.254"
|
||||
#define RT_LWIP_GWADDR "192.168.1.1"
|
||||
#define RT_LWIP_MSKADDR "255.255.255.0"
|
||||
#define RT_LWIP_UDP
|
||||
#define RT_LWIP_TCP
|
||||
#define RT_LWIP_RAW
|
||||
#define RT_MEMP_NUM_NETCONN 8
|
||||
#define RT_LWIP_PBUF_NUM 4
|
||||
#define RT_LWIP_RAW_PCB_NUM 4
|
||||
#define RT_LWIP_UDP_PCB_NUM 4
|
||||
#define RT_LWIP_TCP_PCB_NUM 3
|
||||
#define RT_LWIP_TCP_SEG_NUM 40
|
||||
#define RT_LWIP_TCP_SND_BUF 4096
|
||||
#define RT_LWIP_TCP_WND 2048
|
||||
#define RT_LWIP_TCPTHREAD_PRIORITY 12
|
||||
#define RT_LWIP_TCPTHREAD_MBOX_SIZE 8
|
||||
#define RT_LWIP_TCPTHREAD_STACKSIZE 4096
|
||||
#define RT_LWIP_ETHTHREAD_PRIORITY 14
|
||||
#define RT_LWIP_ETHTHREAD_STACKSIZE 512
|
||||
#define RT_LWIP_ETHTHREAD_MBOX_SIZE 8
|
||||
#define LWIP_NETIF_STATUS_CALLBACK 1
|
||||
#define LWIP_NETIF_LINK_CALLBACK 1
|
||||
#define SO_REUSE 1
|
||||
#define LWIP_SO_RCVTIMEO 1
|
||||
#define LWIP_SO_SNDTIMEO 1
|
||||
#define LWIP_SO_RCVBUF 1
|
||||
#define LWIP_SO_LINGER 0
|
||||
#define LWIP_NETIF_LOOPBACK 0
|
||||
#define RT_LWIP_USING_PING
|
||||
|
||||
/* AT commands */
|
||||
|
||||
@@ -153,6 +211,9 @@
|
||||
/* system packages */
|
||||
|
||||
|
||||
/* Micrium: Micrium software products porting for RT-Thread */
|
||||
|
||||
|
||||
/* peripheral libraries and drivers */
|
||||
|
||||
|
||||
@@ -161,16 +222,19 @@
|
||||
|
||||
/* samples: kernel and components samples */
|
||||
|
||||
|
||||
/* games: games run on RT-Thread console */
|
||||
|
||||
#define SOC_LS1C300
|
||||
#define RT_LS1C_BAICAIBOARD
|
||||
#define RT_USING_SELF_BOOT
|
||||
#define RT_SELF_BOOT_DEBUG
|
||||
#define RT_LS1C_OPENLOONGSON
|
||||
#define RT_USING_UART2
|
||||
#define RT_USING_UART1
|
||||
#define RT_UART_RX_BUFFER_SIZE 64
|
||||
#define RT_USING_GMAC_INT_MODE
|
||||
#define RT_USING_I2C1
|
||||
#define RT_USING_I2C2
|
||||
#define USING_BXCAN0
|
||||
#define USING_BXCAN1
|
||||
#define NO_TOUCH
|
||||
|
||||
#endif
|
||||
@@ -125,4 +125,10 @@ void rt_hw_board_init(void)
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
void rt_hw_us_delay(rt_uint32_t us)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/*@}*/
|
||||
@@ -107,12 +107,14 @@
|
||||
// <section name="LIBC" description="C Runtime library setting" default="always" >
|
||||
// <bool name="RT_USING_LIBC" description="Using C library" default="true" />
|
||||
#define RT_USING_LIBC
|
||||
// <bool name="RT_USING_POSIX" description="Using POSIX library" default="true" />
|
||||
#define RT_USING_POSIX
|
||||
// <bool name="RT_USING_PTHREADS" description="Using POSIX threads library" default="true" />
|
||||
#define RT_USING_PTHREADS
|
||||
// </section>
|
||||
|
||||
// <section name="RT_USING_DFS" description="Device file system" default="true" >
|
||||
// #define RT_USING_DFS
|
||||
#define RT_USING_DFS
|
||||
// <bool name="DFS_USING_WORKDIR" description="Using working directory" default="true" />
|
||||
// #define DFS_USING_WORKDIR
|
||||
// <integer name="DFS_FILESYSTEMS_MAX" description="The maximal number of mounted file system" default="4" />
|
||||
@@ -133,7 +135,7 @@
|
||||
// <bool name="RT_USING_DFS_UFFS" description="Using UFFS" default="false" />
|
||||
// #define RT_USING_DFS_UFFS
|
||||
// <bool name="RT_USING_DFS_DEVFS" description="Using devfs for device objects" default="true" />
|
||||
// #define RT_USING_DFS_DEVFS
|
||||
#define RT_USING_DFS_DEVFS
|
||||
// <bool name="RT_USING_DFS_NFS" description="Using NFS v3 client file system" default="false" />
|
||||
// #define RT_USING_DFS_NFS
|
||||
// <string name="RT_NFS_HOST_EXPORT" description="NFSv3 host export" default="192.168.1.5:/" />
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <time.h>
|
||||
|
||||
#include <rtm.h>
|
||||
|
||||
/* some export routines for module */
|
||||
@@ -35,11 +33,6 @@ RTM_EXPORT(memchr);
|
||||
RTM_EXPORT(toupper);
|
||||
RTM_EXPORT(atoi);
|
||||
|
||||
#ifdef RT_USING_RTC
|
||||
RTM_EXPORT(localtime);
|
||||
RTM_EXPORT(time);
|
||||
#endif
|
||||
|
||||
/* import the full stdio for printf */
|
||||
#if defined(RT_USING_MODULE) && defined(__MICROLIB)
|
||||
#error "[RT_USING_LIBC] Please use standard libc but not microlib."
|
||||
|
||||
@@ -6,10 +6,12 @@
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2020-09-07 Meco Man combine gcc armcc iccarm
|
||||
* 2021-02-12 Meco Man move all definitions located in <clock_time.h> to this file
|
||||
*/
|
||||
#ifndef _SYS_TIME_H_
|
||||
#define _SYS_TIME_H_
|
||||
|
||||
#include <rtconfig.h>
|
||||
#include <time.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -53,6 +55,40 @@ time_t timegm(struct tm * const t);
|
||||
int gettimeofday(struct timeval *tv, struct timezone *tz);
|
||||
int settimeofday(const struct timeval *tv, const struct timezone *tz);
|
||||
|
||||
#ifdef RT_USING_POSIX
|
||||
#include <sys/types.h>
|
||||
/* posix clock and timer */
|
||||
#define MILLISECOND_PER_SECOND 1000UL
|
||||
#define MICROSECOND_PER_SECOND 1000000UL
|
||||
#define NANOSECOND_PER_SECOND 1000000000UL
|
||||
|
||||
#define MILLISECOND_PER_TICK (MILLISECOND_PER_SECOND / RT_TICK_PER_SECOND)
|
||||
#define MICROSECOND_PER_TICK (MICROSECOND_PER_SECOND / RT_TICK_PER_SECOND)
|
||||
#define NANOSECOND_PER_TICK (NANOSECOND_PER_SECOND / RT_TICK_PER_SECOND)
|
||||
|
||||
#ifndef CLOCK_REALTIME
|
||||
#define CLOCK_REALTIME 1
|
||||
#endif
|
||||
|
||||
#define CLOCK_CPUTIME_ID 2
|
||||
|
||||
#ifndef CLOCK_PROCESS_CPUTIME_ID
|
||||
#define CLOCK_PROCESS_CPUTIME_ID CLOCK_CPUTIME_ID
|
||||
#endif
|
||||
#ifndef CLOCK_THREAD_CPUTIME_ID
|
||||
#define CLOCK_THREAD_CPUTIME_ID CLOCK_CPUTIME_ID
|
||||
#endif
|
||||
|
||||
#ifndef CLOCK_MONOTONIC
|
||||
#define CLOCK_MONOTONIC 4
|
||||
#endif
|
||||
|
||||
int clock_getres (clockid_t clockid, struct timespec *res);
|
||||
int clock_gettime (clockid_t clockid, struct timespec *tp);
|
||||
int clock_settime (clockid_t clockid, const struct timespec *tp);
|
||||
int clock_time_to_tick(const struct timespec *time);
|
||||
#endif /* RT_USING_POSIX */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -5,10 +5,13 @@
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2020-09-01 Meco Man First Version
|
||||
* 2020-09-01 Meco Man first Version
|
||||
* 2021-02-12 Meco Man move all functions located in <pthread_sleep.c> to this file
|
||||
*/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <rtthread.h>
|
||||
#include <rthw.h>
|
||||
|
||||
#ifdef RT_USING_POSIX_TERMIOS
|
||||
#include "termios.h"
|
||||
@@ -18,9 +21,31 @@ int isatty(int fd)
|
||||
struct termios ts;
|
||||
return(tcgetattr(fd,&ts) != -1);/*true if no error (is a tty)*/
|
||||
}
|
||||
RTM_EXPORT(isatty);
|
||||
#endif
|
||||
|
||||
char *ttyname(int fd)
|
||||
{
|
||||
return "/dev/tty0"; /*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;
|
||||
|
||||
return seconds - delta_tick/RT_TICK_PER_SECOND;
|
||||
}
|
||||
RTM_EXPORT(sleep);
|
||||
|
||||
int usleep(useconds_t usec)
|
||||
{
|
||||
rt_thread_mdelay(usec / 1000u);
|
||||
rt_hw_us_delay(usec % 1000u);
|
||||
return 0;
|
||||
}
|
||||
RTM_EXPORT(usleep);
|
||||
@@ -39,10 +39,6 @@ RTM_EXPORT(snprintf);
|
||||
|
||||
RTM_EXPORT(fwrite);
|
||||
|
||||
#include <time.h>
|
||||
RTM_EXPORT(localtime);
|
||||
RTM_EXPORT(time);
|
||||
|
||||
#include <setjmp.h>
|
||||
RTM_EXPORT(longjmp);
|
||||
RTM_EXPORT(setjmp);
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <rthw.h>
|
||||
#include <pthread.h>
|
||||
#include <sched.h>
|
||||
#include <sys/time.h>
|
||||
#include "pthread_internal.h"
|
||||
|
||||
RT_DEFINE_SPINLOCK(pth_lock);
|
||||
@@ -687,4 +688,3 @@ int pthread_cancel(pthread_t thread)
|
||||
return 0;
|
||||
}
|
||||
RTM_EXPORT(pthread_cancel);
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
#include <rtthread.h>
|
||||
#include <pthread.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
struct _pthread_cleanup
|
||||
{
|
||||
@@ -62,8 +63,6 @@ typedef struct _pthread_data _pthread_data_t;
|
||||
|
||||
_pthread_data_t *_pthread_get_data(pthread_t thread);
|
||||
|
||||
int clock_time_to_tick(const struct timespec *time);
|
||||
|
||||
void posix_mq_system_init(void);
|
||||
void posix_sem_system_init(void);
|
||||
void pthread_key_system_init(void);
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
# RT-Thread building script for component
|
||||
|
||||
from building import *
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
src = Glob('*.c') + Glob('*.cpp')
|
||||
CPPPATH = [cwd]
|
||||
|
||||
group = DefineGroup('libc', src,
|
||||
depend = ['RT_USING_PTHREADS'], CPPPATH = CPPPATH)
|
||||
|
||||
Return('group')
|
||||
@@ -1,188 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2012-12-08 Bernard fix the issue of _timevalue.tv_usec initialization,
|
||||
* which found by Rob <rdent@iinet.net.au>
|
||||
*/
|
||||
|
||||
#include <rtthread.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#include "clock_time.h"
|
||||
|
||||
static struct timeval _timevalue;
|
||||
int clock_time_system_init()
|
||||
{
|
||||
time_t time;
|
||||
rt_tick_t tick;
|
||||
rt_device_t device;
|
||||
|
||||
time = 0;
|
||||
device = rt_device_find("rtc");
|
||||
if (device != RT_NULL)
|
||||
{
|
||||
/* get realtime seconds */
|
||||
rt_device_control(device, RT_DEVICE_CTRL_RTC_GET_TIME, &time);
|
||||
}
|
||||
|
||||
/* get tick */
|
||||
tick = rt_tick_get();
|
||||
|
||||
_timevalue.tv_usec = (tick%RT_TICK_PER_SECOND) * MICROSECOND_PER_TICK;
|
||||
_timevalue.tv_sec = time - tick/RT_TICK_PER_SECOND - 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
INIT_COMPONENT_EXPORT(clock_time_system_init);
|
||||
|
||||
int clock_time_to_tick(const struct timespec *time)
|
||||
{
|
||||
int tick;
|
||||
int nsecond, second;
|
||||
struct timespec tp;
|
||||
|
||||
RT_ASSERT(time != RT_NULL);
|
||||
|
||||
tick = RT_WAITING_FOREVER;
|
||||
if (time != NULL)
|
||||
{
|
||||
/* get current tp */
|
||||
clock_gettime(CLOCK_REALTIME, &tp);
|
||||
|
||||
if ((time->tv_nsec - tp.tv_nsec) < 0)
|
||||
{
|
||||
nsecond = NANOSECOND_PER_SECOND - (tp.tv_nsec - time->tv_nsec);
|
||||
second = time->tv_sec - tp.tv_sec - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
nsecond = time->tv_nsec - tp.tv_nsec;
|
||||
second = time->tv_sec - tp.tv_sec;
|
||||
}
|
||||
|
||||
tick = second * RT_TICK_PER_SECOND + nsecond * RT_TICK_PER_SECOND / NANOSECOND_PER_SECOND;
|
||||
if (tick < 0) tick = 0;
|
||||
}
|
||||
|
||||
return tick;
|
||||
}
|
||||
RTM_EXPORT(clock_time_to_tick);
|
||||
|
||||
int clock_getres(clockid_t clockid, struct timespec *res)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (res == RT_NULL)
|
||||
{
|
||||
rt_set_errno(EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch (clockid)
|
||||
{
|
||||
case CLOCK_REALTIME:
|
||||
res->tv_sec = 0;
|
||||
res->tv_nsec = NANOSECOND_PER_SECOND/RT_TICK_PER_SECOND;
|
||||
break;
|
||||
|
||||
#ifdef RT_USING_CPUTIME
|
||||
case CLOCK_CPUTIME_ID:
|
||||
res->tv_sec = 0;
|
||||
res->tv_nsec = clock_cpu_getres();
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
ret = -1;
|
||||
rt_set_errno(EINVAL);
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
RTM_EXPORT(clock_getres);
|
||||
|
||||
int clock_gettime(clockid_t clockid, struct timespec *tp)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (tp == RT_NULL)
|
||||
{
|
||||
rt_set_errno(EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch (clockid)
|
||||
{
|
||||
case CLOCK_REALTIME:
|
||||
{
|
||||
/* get tick */
|
||||
int tick = rt_tick_get();
|
||||
|
||||
tp->tv_sec = _timevalue.tv_sec + tick / RT_TICK_PER_SECOND;
|
||||
tp->tv_nsec = (_timevalue.tv_usec + (tick % RT_TICK_PER_SECOND) * MICROSECOND_PER_TICK) * 1000;
|
||||
}
|
||||
break;
|
||||
|
||||
#ifdef RT_USING_CPUTIME
|
||||
case CLOCK_CPUTIME_ID:
|
||||
{
|
||||
float unit = 0;
|
||||
long long cpu_tick;
|
||||
|
||||
unit = clock_cpu_getres();
|
||||
cpu_tick = clock_cpu_gettime();
|
||||
|
||||
tp->tv_sec = ((int)(cpu_tick * unit)) / NANOSECOND_PER_SECOND;
|
||||
tp->tv_nsec = ((int)(cpu_tick * unit)) % NANOSECOND_PER_SECOND;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
rt_set_errno(EINVAL);
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
RTM_EXPORT(clock_gettime);
|
||||
|
||||
int clock_settime(clockid_t clockid, const struct timespec *tp)
|
||||
{
|
||||
int second;
|
||||
rt_tick_t tick;
|
||||
rt_device_t device;
|
||||
|
||||
if ((clockid != CLOCK_REALTIME) || (tp == RT_NULL))
|
||||
{
|
||||
rt_set_errno(EINVAL);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* get second */
|
||||
second = tp->tv_sec;
|
||||
/* get tick */
|
||||
tick = rt_tick_get();
|
||||
|
||||
/* update timevalue */
|
||||
_timevalue.tv_usec = MICROSECOND_PER_SECOND - (tick % RT_TICK_PER_SECOND) * MICROSECOND_PER_TICK;
|
||||
_timevalue.tv_sec = second - tick/RT_TICK_PER_SECOND - 1;
|
||||
|
||||
/* update for RTC device */
|
||||
device = rt_device_find("rtc");
|
||||
if (device != RT_NULL)
|
||||
{
|
||||
/* set realtime seconds */
|
||||
rt_device_control(device, RT_DEVICE_CTRL_RTC_SET_TIME, &second);
|
||||
}
|
||||
else
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
RTM_EXPORT(clock_settime);
|
||||
@@ -1,52 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2017-12-31 Bernard the first version
|
||||
*/
|
||||
|
||||
#ifndef CLOCK_TIME_H__
|
||||
#define CLOCK_TIME_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* posix clock and timer */
|
||||
#define MILLISECOND_PER_SECOND 1000UL
|
||||
#define MICROSECOND_PER_SECOND 1000000UL
|
||||
#define NANOSECOND_PER_SECOND 1000000000UL
|
||||
|
||||
#define MILLISECOND_PER_TICK (MILLISECOND_PER_SECOND / RT_TICK_PER_SECOND)
|
||||
#define MICROSECOND_PER_TICK (MICROSECOND_PER_SECOND / RT_TICK_PER_SECOND)
|
||||
#define NANOSECOND_PER_TICK (NANOSECOND_PER_SECOND / RT_TICK_PER_SECOND)
|
||||
|
||||
#ifndef CLOCK_REALTIME
|
||||
#define CLOCK_REALTIME 1
|
||||
#endif
|
||||
|
||||
#define CLOCK_CPUTIME_ID 2
|
||||
|
||||
#ifndef CLOCK_PROCESS_CPUTIME_ID
|
||||
#define CLOCK_PROCESS_CPUTIME_ID CLOCK_CPUTIME_ID
|
||||
#endif
|
||||
#ifndef CLOCK_THREAD_CPUTIME_ID
|
||||
#define CLOCK_THREAD_CPUTIME_ID CLOCK_CPUTIME_ID
|
||||
#endif
|
||||
|
||||
#ifndef CLOCK_MONOTONIC
|
||||
#define CLOCK_MONOTONIC 4
|
||||
#endif
|
||||
|
||||
int clock_getres (clockid_t clockid, struct timespec *res);
|
||||
int clock_gettime (clockid_t clockid, struct timespec *tp);
|
||||
int clock_settime (clockid_t clockid, const struct timespec *tp);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,30 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2018, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2020-12-16 Meco Man add usleep
|
||||
*/
|
||||
#include <rtthread.h>
|
||||
#include <rthw.h>
|
||||
#include <unistd.h>
|
||||
|
||||
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;
|
||||
|
||||
return seconds - delta_tick/RT_TICK_PER_SECOND;
|
||||
}
|
||||
|
||||
int usleep(useconds_t usec)
|
||||
{
|
||||
rt_thread_mdelay(usec / 1000u);
|
||||
rt_hw_us_delay(usec % 1000u);
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user