9
0
Fork 0

Restructure header files for POSIX compliance; eliminate compile warnings

git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@107 7fd9a85b-ad96-42d3-883c-3090e2eb8679
This commit is contained in:
patacongo 2007-03-20 16:51:12 +00:00
parent 4443fe2ea9
commit 729a487a62
63 changed files with 1025 additions and 612 deletions

View File

@ -60,6 +60,10 @@
0.1.3 2007-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
* Fix error in handing signed decimal in vsprintf().
* Major restructuring of header files to get closer to
POSIX compliance.
* Eliminate compilation warnings that that crept into
recent check-ins
* Some Documentation updates
* Added support for the Neuros OSD / DM320

View File

@ -1492,7 +1492,8 @@ This parameter is required but not used in the present
implementation.
<LI><I>value</I>. The value parameter is type unsigned int. The semaphore
is created with an initial value of <I>value</I>. Valid initial values for
semaphores must be less than or equal to <I>SEM_MAX_VALUE</I>.
semaphores must be less than or equal to <I>SEM_VALUE_MAX</I> (defined in
<CODE>include/limits.h</CODE>).
</UL>
</UL>
@ -2406,18 +2407,11 @@ in the si_code member. The content of si_value is only meaningful
if the signal was generated by sigqueue(). The following values
for si_code are defined in signal.h:
<UL>
<LI>Standard:
<UL>
<LI><I>SI_QUEUE</I>. Signal sent from sigqueue
<LI><I>SI_MESGQ</I>. Signal generated by arrival of a message
on an empty message queue
</UL>
<LI>Unique to this implementation:
<UL>
<LI><I>SI_TIMEOUT</I>. No Signal, restarted by timeout
</UL>
<LI><I>SI_USER</I>. Signal sent from kill, raise, or abort
<LI><I>SI_QUEUE</I>. Signal sent from sigqueue
<LI><I>SI_TIMER</I>. Signal is result of timer expiration
<LI><I>SI_ASYNCIO</I>. Signal is the result of asynch IO completion
<LI><I>SI_MESGQ</I>. Signal generated by arrival of a message on an empty message queue.
</UL>
<P>

View File

@ -44,6 +44,7 @@
* Definitions
************************************************************/
#define CHAR_BIT 8
#define SCHAR_MIN 0x80
#define SCHAR_MAX 0x7f
#define UCHAR_MAX 0xff

View File

@ -44,6 +44,7 @@
* Definitions
************************************************************/
#define CHAR_BIT 8
#define SCHAR_MIN 0x80
#define SCHAR_MAX 0x7f
#define UCHAR_MAX 0xff

View File

@ -44,6 +44,7 @@
* Definitions
************************************************************/
#define CHAR_BIT 8
#define SCHAR_MIN 0x80
#define SCHAR_MAX 0x7f
#define UCHAR_MAX 0xff

View File

@ -44,6 +44,7 @@
* Definitions
************************************************************/
#define CHAR_BIT 8
#define SCHAR_MIN 0x80
#define SCHAR_MAX 0x7f
#define UCHAR_MAX 0xff

View File

@ -43,6 +43,8 @@
#include <nuttx/config.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <nuttx/os_external.h>
#include "ostest.h"

View File

@ -43,6 +43,7 @@
#include <nuttx/os_external.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sched.h>
#include "ostest.h"

View File

@ -40,6 +40,7 @@
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <fcntl.h>
#include <pthread.h>
#include <mqueue.h>
#include <sched.h>

View File

@ -39,7 +39,7 @@
#include <nuttx/config.h>
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sched.h>
#include <errno.h>
#include <nuttx/fs.h>

View File

@ -76,7 +76,6 @@
int closedir(FAR DIR *dirp)
{
struct internal_dir_s *idir = (struct internal_dir_s *)dirp;
off_t i;
if (!idir)
{

View File

@ -39,6 +39,7 @@
#include <nuttx/config.h>
#include <sys/types.h>
#include <string.h>
#include <errno.h>
#include <nuttx/fs.h>
#include "fs_internal.h"

View File

@ -39,6 +39,7 @@
#include <nuttx/config.h>
#include <sys/types.h>
#include <stdlib.h>
#include <errno.h>
#include <nuttx/fs.h>
#include "fs_internal.h"

View File

@ -39,7 +39,7 @@
#include <nuttx/config.h>
#include <sys/types.h>
#include <stdio.h>
#include <fcntl.h>
#include <sched.h>
#include <errno.h>
#ifdef CONFIG_FILE_MODE

View File

@ -43,7 +43,8 @@
#include <nuttx/config.h>
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sched.h>
#include <errno.h>
#include "fs_internal.h"

View File

@ -43,7 +43,8 @@
#include <nuttx/config.h>
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sched.h>
#include <errno.h>
#include "fs_internal.h"

View File

@ -76,7 +76,7 @@
*
************************************************************/
#define isascii(c) ((c) >= 0 && (c) <= 0x7f);
#define isascii(c) ((c) >= 0 && (c) <= 0x7f);
/************************************************************
* Function: isprint
@ -86,7 +86,17 @@
*
************************************************************/
#define isprint(c) ((c) >= 0x20 && (c) < 0x7f)
#define isprint(c) ((c) >= 0x20 && (c) < 0x7f)
/************************************************************
* Function: isgraph
*
* Description:
* Checks for a printable character (excluding space)
*
************************************************************/
#define isgraph(c) ((c) > 0x20 && (c) < 0x7f)
/************************************************************
* Function: iscntrl
@ -98,6 +108,36 @@
#define iscontrol(c) (!isprint(c))
/************************************************************
* Function: islower
*
* Description:
* Checks for an lowercase letter.
*
************************************************************/
#define islower(c) ((c) >= 'a' && (c) <= 'z')
/************************************************************
* Function: isupper
*
* Description:
* Checks for an uppercase letter.
*
************************************************************/
#define isupper(c) ((c) >= 'a' && (c) <= 'z')
/************************************************************
* Function: isalpha
*
* Description:
* Checks for an alphabetic character
*
************************************************************/
#define isalpha(c) (islower(c) || isupper(c))
/************************************************************
* Function: isdigit
*
@ -108,6 +148,27 @@
#define isdigit(c) ((c) >= '0' && (c) <= '9')
/************************************************************
* Function: isalnum
*
* Description:
* Checks for an alphanumeric character
*
************************************************************/
#define isalnum(c) (isalpha(c) || isdigit(c))
/************************************************************
* Function: ispunct
*
* Description:
* Checks for a printable character which is not a space
* or an alphanumeric character
*
************************************************************/
#define ispunct(c) (isgraph(c) && !isalnum(c))
/************************************************************
* Function: isxdigit
*

181
nuttx/include/fcntl.h Normal file
View File

@ -0,0 +1,181 @@
/********************************************************************************
* fcntl.h
*
* Copyright (C) 2007 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name Gregory Nutt nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
********************************************************************************/
#ifndef __FCNTL_H
#define __FCNTL_H
/********************************************************************************
* Included Files
********************************************************************************/
#include <nuttx/config.h>
#include <sys/types.h>
/********************************************************************************
* Definitions
********************************************************************************/
/* open flag settings for open() (and related APIs) */
#define O_RDONLY 0x01 /* Open for read access */
#define O_WRONLY 0x02 /* Open for write access */
#define O_RDWR 0x03 /* Open for both read & write access */
#define O_CREAT 0x04 /* Create file/sem/mq object */
#define O_EXCL 0x08 /* Name must not exist when opened */
#define O_APPEND 0x10 /* Keep contents, append to end */
#define O_TRUNC 0x20 /* Delete contents */
#define O_NONBLOCK 0x40 /* Don't wait for data */
#define O_SYNC 0x80 /* Synchronize output on write */
#define O_DSYNC OSYNC
#define O_RSYNC 0x00 /* Sychronize input on read */
#define O_ACCMODE 0x00 /* Required by POSIX */
#define O_NOCTTY 0x00 /* Reqired by POSIX */
#define O_RDOK O_RDONLY /* Not POSIX */
#define O_WROK O_WRONLY /* Not POSIX */
/* fcntl() commands */
#define F_DUPFD 0 /* Duplicate a file descriptor */
#define F_GETFD 1 /* Read the file descriptor flags */
#define F_GETFL 2 /* Read the file status flags */
#define F_GETLEASE 3 /* Indicas what type of lease is held on fd (linux) */
#define F_GETLK 4 /* Check if we could place a lock */
#define F_GETOWN 5 /* Get the pid receiving SIGIO and SIGURG signals for fd */
#define F_GETSIG 6 /* Get the signal sent */
#define F_NOTIFY 7 /* Provide notification when directory referred to by fd changes (linux)*/
#define F_SETFD 8 /* Set the file descriptor flags to value */
#define F_SETFL 9 /* Set the file status flags to the value */
#define F_SETLEASE 10 /* Set or remove file lease (linux) */
#define F_SETLK 11 /* Acquire or release a lock on range of bytes */
#define F_SETLKW 12 /* Like F_SETLK, but wait for lock to become available */
#define F_SETOWN 13 /* Set pid that will receive SIGIO and SIGURG signals for fd */
#define F_SETSIG 14 /* Set the signal to be sent */
/* close-on-exec flag for F_GETRL and F_SETFL */
#define FD_CLOEXEC 1
/* Arguments to F_SETLEASE */
#define F_RDLCK 0 /* Take out a read lease */
#define F_WRLCK 2 /* Take out a write lease */
#define F_UNLCK 3 /* Remove a lease */
/* These are the notifications that can be received from F_NOTIFY (linux) */
#define DN_ACCESS 0 /* A file was accessed */
#define DN_MODIFY 1 /* A file was modified */
#define DN_CREATE 2 /* A file was created */
#define DN_DELETE 3 /* A file was unlinked */
#define DN_RENAME 4 /* A file was renamed */
#define DN_ATTRIB 5 /* Attributes of a file were changed */
#define S_IFMT 0170000
#define S_IFSOCK 0140000
#define S_IFLNK 0120000
#define S_IFREG 0100000
#define S_IFBLK 0060000
#define S_IFCHR 0020000
#define S_IFDIR 0040000
#define S_IFIFO 0010000
#define S_ISUID 0004000
#define S_ISGID 0002000
#define S_ISVTX 0001000
#define S_IRWXU 0000700
#define S_IRUSR 0000400
#define S_IWUSR 0000200
#define S_IXUSR 0000100
#define S_IRWXG 0000070
#define S_IRGRP 0000040
#define S_IWGRP 0000020
#define S_IXGRP 0000010
#define S_IRWXO 0000007
#define S_IROTH 0000004
#define S_IWOTH 0000002
#define S_IXOTH 0000001
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
/********************************************************************************
* Public Type Definitions
********************************************************************************/
/* struct flock is the third argument for F_GETLK, F_SETLK and F_SETLKW */
struct flock
{
short l_type; /* Type of lock: F_RDLCK, F_WRLCK, F_UNLCK */
short l_whence; /* How to interpret l_start: SEEK_SET, SEEK_CUR, SEEK_END */
off_t l_start; /* Starting offset for lock */
off_t l_len; /* Number of bytes to lock */
pid_t l_pid; /* PID of process blocking our lock (F_GETLK only) */
};
/********************************************************************************
* Public Variables
********************************************************************************/
/********************************************************************************
* Public Function Prototypes
********************************************************************************/
#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
extern "C" {
#else
#define EXTERN extern
#endif
/* POSIX-like File System Interfaces */
EXTERN int creat(const char *path, mode_t mode);
EXTERN int open(const char *path, int oflag, ...);
EXTERN int fcntl(int fd, int cmd, ...);
#undef EXTERN
#if defined(__cplusplus)
}
#endif
#endif /* __FCNTL_H */

View File

@ -1,4 +1,4 @@
/************************************************************
/********************************************************************************
* limits.h
*
* Copyright (C) 2007 Gregory Nutt. All rights reserved.
@ -31,14 +31,14 @@
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
************************************************************/
********************************************************************************/
#ifndef __LIMITS_H
#define __LIMITS_H
/************************************************************
/********************************************************************************
* Included Files
************************************************************/
********************************************************************************/
#include <nuttx/config.h>
@ -46,13 +46,133 @@
#include <arch/limits.h>
/************************************************************
/********************************************************************************
* Definitions
************************************************************/
********************************************************************************/
/* Configurable limits */
/* Configurable limits required by POSIX
*
* Required for all implementations:
*
* _POSIX_ARG_MAX Total length of string arguments
* _POSIX_CHILD_MAX Number of child tasks active
* _POSIX_LINK_MAX The number of links a file can have
* _POSIX_MAX_CANON Number bytes in TTY canonical input queue
* _POSIX_MAX_INPUT Number bytes in TTY canonical input queue
* _POSIX_NAME_MAX Number of bytes in a file or pathname component
* _POSIX_NGROUPS_MAX Number supplementary group IDs
* _POSIX_OPEN_MAX Number of files a task can have open at once
* _POSIX_PATH_MAX Number of bytes in a full pathname
* _POSIX_PIPE_BUF Number of bytes for atomic write into pipe
* _POSIX_SSIZE_MAX Largest filesystem write; also max value of ssize_t
* _POSIX_STREAM_MAX Number of std I/O streams open at once
* _POSIX_TZNAME_MAX Max number of bytes of a timezone name
*
* Required for sigqueue
*
* _POSIX_RTSIG_MAX Difference between SIGRTMIN and SIGRTMAX
* _POSIX_SIGQUEUE_MAX Max number signals a task can queue
*
* Required for POSIX timers
*
* _POSIX_DELAYTIMER_MAX Max number timer overruns
* _POSIX_TIMER_MAX Max number of timers per task
* _POSIX_CLOCKRES_MIN Clock resolution in nanoseconds
*
* Required for asynchronous I/O
*
* _POSIX_AIO_LISTIO_MAX Max number of AIOs in single listio call
* _POSIX_AIO_MAX Max number of simultaneous AIO operations
*
* Required for POSIX message passing
*
* _POSIX_MQ_OPEN_MAX Max number message queues task may open (mq_open)
* _POSIX_MQ_PRIO_MAX Max message priority (mq_send)
*
* Required for POSIX semaphores
*
* _POSIX_SEM_NSEMS_MAX Max number of open semaphores per task
* _POSIX_SEM_VALUE_MAX Max value a semaphore may have
*/
#define NAME_MAX CONFIG_NAME_MAX
#define MAXNAMELEN CONFIG_NAME_MAX
#define _POSIX_ARG_MAX 4096
#define _POSIX_CHILD_MAX 6
#define _POSIX_LINK_MAX 8
#define _POSIX_MAX_CANON 255
#define _POSIX_MAX_INPUT 255
#define _POSIX_NAME_MAX CONFIG_NAME_MAX
#define _POSIX_NGROUPS_MAX 0
#define _POSIX_OPEN_MAX CONFIG_NFILE_DESCRIPTORS
#define _POSIX_PATH_MAX 255
#define _POSIX_PIPE_BUF 512
#define _POSIX_SSIZE_MAX INT_MAX
#define _POSIX_STREAM_MAX CONFIG_NFILE_STREAMS
#define _POSIX_TZNAME_MAX 3
/* Requred for sigqueue */
#define _POSIX_RTSIG_MAX 31
#define _POSIX_SIGQUEUE_MAX 32
/* Required for POSIX timers */
#define _POSIX_DELAYTIMER_MAX 32
#define _POSIX_TIMER_MAX 32
#define _POSIX_CLOCKRES_MIN 10000000
/* Required for asynchronous I/O */
#define _POSIX_AIO_LISTIO_MAX 2
#define _POSIX_AIO_MAX 1
/* Required for POSIX message passing */
#define _POSIX_MQ_OPEN_MAX 8
#define _POSIX_MQ_PRIO_MAX UCHAR_MAX
/* Required for POSIX semaphores */
#define _POSIX_SEM_NSEMS_MAX INT_MAX
#define _POSIX_SEM_VALUE_MAX 0x7fff
/* Actual limits. These values may be increased from the POSIX minimum
* values above or made indeterminate
*/
#define ARG_MAX _POSIX_ARG_MAX
#define CHILD_MAX _POSIX_CHILD_MAX
#define LINK_MAX _POSIX_LINK_MAX
#define MAX_CANON _POSIX_MAX_CANON
#define MAX_INPUT _POSIX_MAX_INPUT
#define NAME_MAX _POSIX_NAME_MAX
#define NGROUPS_MAX _POSIX_NGROUPS_MAX
#define OPEN_MAX _POSIX_OPEN_MAX
#define PATH_MAX _POSIX_PATH_MAX
#define PIPE_BUF _POSIX_PIPE_BUF
#define SSIZE_MAX _POSIX_SSIZE_MAX
#define STREAM_MAX _POSIX_STREAM_MAX
#define TZNAME_MAX _POSIX_TZNAME_MAX
#define RTSIG_MAX _POSIX_RTSIG_MAX
#define SIGQUEUE_MAX _POSIX_SIGQUEUE_MAX
#define DELAYTIMER_MAX _POSIX_DELAYTIMER_MAX
#define TIMER_MAX _POSIX_TIMER_MAX
#define CLOCKRES_MIN _POSIX_CLOCKRES_MIN
/* Required for asynchronous I/O */
#define AIO_LISTIO_MAX _POSIX_AIO_LISTIO_MAX
#define AIO_MAX _POSIX_AIO_MAX
/* Required for POSIX message passing */
#define MQ_OPEN_MAX _POSIX_MQ_OPEN_MAX
#define MQ_PRIO_MAX _POSIX_MQ_PRIO_MAX
/* Required for POSIX semaphores */
#define SEM_NSEMS_MAX _POSIX_SEM_NSEMS_MAX
#define SEM_VALUE_MAX _POSIX_SEM_VALUE_MAX
#endif /* __LIMITS_H */

View File

@ -1,4 +1,4 @@
/************************************************************
/********************************************************************************
* mqueue.h
*
* Copyright (C) 2007 Gregory Nutt. All rights reserved.
@ -31,62 +31,54 @@
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
************************************************************/
********************************************************************************/
#ifndef __MQUEUE_H
#define __MQUEUE_H
/************************************************************
/********************************************************************************
* Included Files
************************************************************/
********************************************************************************/
#include <sys/types.h>
#include <signal.h>
#include "queue.h"
/************************************************************
/********************************************************************************
* Compilations Switches
************************************************************/
********************************************************************************/
/************************************************************
/********************************************************************************
* Definitions
************************************************************/
********************************************************************************/
/************************************************************
#define MQ_NONBLOCK O_NONBLOCK
/********************************************************************************
* Global Type Declarations
************************************************************/
********************************************************************************/
/* Message queue attributes */
struct mq_attr
{
size_t mq_maxmsg; /* Max number of messages in queue */
size_t mq_msgsize; /* Max message size */
unsigned mq_flags; /* Queue flags */
size_t mq_curmsgs; /* Number of messages currently in queue */
};
/* The following is used to attach a signal to a message queue
* to notify a task when a message is available on a queue
*/
struct sigevent {
int sigev_signo;
union sigval sigev_value;
int sigev_notify;
size_t mq_maxmsg; /* Max number of messages in queue */
size_t mq_msgsize; /* Max message size */
unsigned mq_flags; /* Queue flags */
size_t mq_curmsgs; /* Number of messages currently in queue */
};
/* Message queue descriptor */
typedef FAR struct mq_des *mqd_t;
/************************************************************
/********************************************************************************
* Global Variables
************************************************************/
********************************************************************************/
/************************************************************
/********************************************************************************
* Global Function Prototypes
************************************************************/
********************************************************************************/
#ifdef __cplusplus
#define EXTERN extern "C"
@ -98,17 +90,12 @@ extern "C" {
EXTERN mqd_t mq_open(const char *mq_name, int oflags, ... );
EXTERN int mq_close(mqd_t mqdes );
EXTERN int mq_unlink(const char *mq_name );
EXTERN int mq_send(mqd_t mqdes, const void *msg,
size_t msglen, int prio );
EXTERN int mq_receive(mqd_t mqdes, void *msg,
size_t msglen, int *prio );
EXTERN int mq_notify(mqd_t mqdes,
const struct sigevent *notification );
EXTERN int mq_setattr(mqd_t mqdes,
const struct mq_attr *mq_stat,
EXTERN int mq_send(mqd_t mqdes, const void *msg, size_t msglen, int prio );
EXTERN int mq_receive(mqd_t mqdes, void *msg, size_t msglen, int *prio );
EXTERN int mq_notify(mqd_t mqdes, const struct sigevent *notification );
EXTERN int mq_setattr(mqd_t mqdes, const struct mq_attr *mq_stat,
struct mq_attr *oldstat);
EXTERN int mq_getattr(mqd_t mqdes,
struct mq_attr *mq_stat);
EXTERN int mq_getattr(mqd_t mqdes, struct mq_attr *mq_stat);
#undef EXTERN
#ifdef __cplusplus

287
nuttx/include/nuttx/sched.h Normal file
View File

@ -0,0 +1,287 @@
/********************************************************************************
* sched.h
*
* Copyright (C) 2007 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name Gregory Nutt nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
********************************************************************************/
#ifndef __NUTTX_SCHED_H
#define __NUTTX_SCHED_H
/********************************************************************************
* Included Files
********************************************************************************/
#include <nuttx/config.h>
#include <queue.h>
#include <signal.h>
#include <semaphore.h>
#include <pthread.h>
#include <mqueue.h>
#include <time.h>
#include <nuttx/irq.h>
/********************************************************************************
* Definitions
********************************************************************************/
/* Task Management Definitins ***************************************************/
/* This is the maximum number of times that a lock can be set */
#define MAX_LOCK_COUNT 127
/* Values for the _TCB flags flag bits */
#define TCB_FLAG_PTHREAD 0x0001 /* Thread is a pthread */
#define TCB_FLAG_NONCANCELABLE 0x0002 /* Pthread is non-cancelable */
#define TCB_FLAG_CANCEL_PENDING 0x0004 /* Pthread cancel is pending */
#define TCB_FLAG_ROUND_ROBIN 0x0008 /* Round robin sched enabled */
/********************************************************************************
* Global Type Definitions
********************************************************************************/
#ifndef __ASSEMBLY__
/* General Task Management Types ************************************************/
/* This is the type of the task_state field of the TCB.
* NOTE: the order and content of this enumeration is
* critical since there are some OS tables indexed by these
* values.
*/
typedef enum tstate_e
{
TSTATE_TASK_INVALID = 0, /* INVALID - TCB has not yet been initialized */
TSTATE_TASK_PENDING = 1, /* READY_TO_RUN - Pending preemption unlock */
TSTATE_TASK_READYTORUN = 2, /* READY-TO-RUN - But not running */
TSTATE_TASK_RUNNING = 3, /* READY_TO_RUN - And running */
TSTATE_TASK_INACTIVE = 4, /* BLOCKED - Initialized but not yet activated */
TSTATE_WAIT_SEM = 5, /* BLOCKED - Waiting for a semaphore */
#ifndef CONFIG_DISABLE_SIGNALS
TSTATE_WAIT_SIG = 6, /* BLOCKED - Waiting for a signal */
#endif
#ifndef CONFIG_DISABLE_MQUEUE
TSTATE_WAIT_MQNOTEMPTY, /* BLOCKED - Waiting for a MQ to become not empty. */
TSTATE_WAIT_MQNOTFULL /* BLOCKED - Waiting for a MQ to become not full. */
#endif
};
typedef enum tstate_e tstate_t;
/* The following definitions are determined by tstate_t */
#define FIRST_READY_TO_RUN_STATE TSTATE_TASK_READYTORUN
#define LAST_READY_TO_RUN_STATE TSTATE_TASK_RUNNING
#define FIRST_BLOCKED_STATE TSTATE_TASK_INACTIVE
#ifndef CONFIG_DISABLE_MQUEUE
# define LAST_BLOCKED_STATE TSTATE_WAIT_MQNOTFULL
# ifndef CONFIG_DISABLE_SIGNALS
# define NUM_TASK_STATES 9
# else
# define NUM_TASK_STATES 8
# endif
#else
# ifndef CONFIG_DISABLE_SIGNALS
# define LAST_BLOCKED_STATE TSTATE_WAIT_SIG
# define NUM_TASK_STATES 7
# else
# define LAST_BLOCKED_STATE TSTATE_WAIT_SEM
# define NUM_TASK_STATES 6
# endif
#endif
/* The following is the form of a thread start-up function */
typedef void (*start_t)(void);
/* This is the entry point into the main thread of the task
* or into a created pthread within the task.
*/
union entry_u
{
pthread_startroutine_t pthread;
main_t main;
};
typedef union entry_u entry_t;
/* This is the type of the function that is executed with
* exit() is called (if registered via atexit()).
*/
typedef void (*exitfunc_t)(void);
/* POSIX Message queue */
typedef struct msgq_s msgq_t;
/* This is the task control block (TCB) */
struct _TCB
{
/* Fields used to support list management *************************************/
FAR struct _TCB *flink; /* link in DQ of TCBs */
FAR struct _TCB *blink;
/* Task Management Fields *****************************************************/
pid_t pid; /* This is the ID of the thread */
start_t start; /* Thread start function */
entry_t entry; /* Entry Point into the thread */
exitfunc_t exitfunc; /* Called if exit is called. */
ubyte sched_priority; /* Current priority of the thread */
tstate_t task_state; /* Current state of the thread */
uint16 flags; /* Misc. general status flags */
sint16 lockcount; /* 0=preemptable (not-locked) */
FAR void *joininfo; /* Detach-able info to support join */
#if CONFIG_RR_INTERVAL > 0
int timeslice; /* RR timeslice interval remaining */
#endif
/* Values needed to restart a task ********************************************/
ubyte init_priority; /* Initial priority of the task */
char *argv[CONFIG_MAX_TASK_ARGS+1]; /* Name+start-up parameters */
/* Stack-Related Fields *******************************************************/
#ifndef CONFIG_CUSTOM_STACK
size_t adj_stack_size; /* Stack size after adjustment */
/* for hardware, processor, etc. */
/* (for debug purposes only) */
FAR void *stack_alloc_ptr; /* Pointer to allocated stack */
/* Need to deallocate stack */
FAR void *adj_stack_ptr; /* Adjusted stack_alloc_ptr for HW */
/* The initial stack pointer value */
#endif
/* POSIX thread Specific Data *************************************************/
#if !defined(CONFIG_DISABLE_PTHREAD) && CONFIG_NPTHREAD_KEYS > 0
FAR void *pthread_data[CONFIG_NPTHREAD_KEYS];
#endif
/* POSIX Semaphore Control Fields *********************************************/
sem_t *waitsem; /* Semaphore ID waiting on */
/* POSIX Signal Control Fields ************************************************/
#ifndef CONFIG_DISABLE_SIGNALS
sigset_t sigprocmask; /* Signals that are blocked */
sigset_t sigwaitmask; /* Waiting for pending signals */
sq_queue_t sigactionq; /* List of actions for signals */
sq_queue_t sigpendingq; /* List of Pending Signals */
sq_queue_t sigpendactionq; /* List of pending signal actions */
sq_queue_t sigpostedq; /* List of posted signals */
siginfo_t sigunbinfo; /* Signal info when task unblocked */
#endif
/* POSIX Named Message Queue Fields *******************************************/
#ifndef CONFIG_DISABLE_MQUEUE
sq_queue_t msgdesq; /* List of opened message queues */
FAR msgq_t *msgwaitq; /* Waiting for this message queue */
#endif
/* Library related fields *****************************************************/
int errno; /* Current per-thread errno */
/* File system support ********************************************************/
#if CONFIG_NFILE_DESCRIPTORS > 0
FAR struct filelist *filelist; /* Maps file descriptor to file */
#endif
#if CONFIG_NFILE_STREAMS > 0
FAR struct streamlist *streams; /* Holds C buffered I/O info */
#endif
/* State save areas ***********************************************************/
/* The form and content of these fields are processor-specific. */
struct xcptcontext xcp; /* Interrupt register save area */
#if CONFIG_TASK_NAME_SIZE > 0
char name[CONFIG_TASK_NAME_SIZE]; /* Task name */
#endif
};
typedef struct _TCB _TCB;
/* This is the callback type used by sched_foreach() */
typedef void (sched_foreach_t)(FAR _TCB *tcb, FAR void *arg);
#endif /* __ASSEMBLY__ */
/********************************************************************************
* Global Function Prototypes
********************************************************************************/
#ifndef __ASSEMBLY__
#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
extern "C" {
#else
#define EXTERN extern
#endif
/* File system helpers */
#if CONFIG_NFILE_DESCRIPTORS > 0
EXTERN FAR struct filelist *sched_getfiles(void);
#if CONFIG_NFILE_STREAMS > 0
EXTERN FAR struct streamlist *sched_getstreams(void);
#endif /* CONFIG_NFILE_STREAMS */
#endif /* CONFIG_NFILE_DESCRIPTORS */
/* sched_foreach will enumerate over each task and provide the
* TCB of each task to a user callback functions. Interrupts
* will be disabled throughout this enumeration!
*/
EXTERN void sched_foreach(sched_foreach_t handler, FAR void *arg);
#undef EXTERN
#if defined(__cplusplus)
}
#endif
#endif /* __ASSEMBLY__ */
#endif /* __NUTTX_SCHED_H */

View File

@ -1,4 +1,4 @@
/************************************************************
/********************************************************************************
* pthread.h
*
* Copyright (C) 2007 Gregory Nutt. All rights reserved.
@ -31,14 +31,14 @@
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
************************************************************/
********************************************************************************/
#ifndef __PTHREAD_H
#define __PTHREAD_H
/************************************************************
/********************************************************************************
* Included Files
************************************************************/
********************************************************************************/
#include <nuttx/config.h> /* Default settings */
#include <nuttx/compiler.h> /* Compiler settings */
@ -47,9 +47,9 @@
#include <time.h> /* Needed for struct timespec */
#include <nuttx/compiler.h> /* For noreturn_function */
/************************************************************
/********************************************************************************
* Compilation Switches
************************************************************/
********************************************************************************/
/* Standard POSIX switches */
@ -60,9 +60,9 @@
#define _POSIX_THREAD_ATTR_STACKSIZE
#endif
/************************************************************
/********************************************************************************
* Definitions
************************************************************/
********************************************************************************/
#define PTHREAD_PROCESS_PRIVATE 0
#define PTHREAD_PROCESS_SHARED 1
@ -88,9 +88,9 @@
# define PTHREAD_CANCELED ((FAR void*)ERROR)
/************************************************************
/********************************************************************************
* Global Type Declarations
************************************************************/
********************************************************************************/
#ifdef __cplusplus
#define EXTERN extern "C"
@ -144,125 +144,96 @@ struct pthread_mutex_s
typedef struct pthread_mutex_s pthread_mutex_t;
#define PTHREAD_MUTEX_INITIALIZER {0, {1, 0xffff}}
/************************************************************
* Global Variables
************************************************************/
/* Forware references */
/************************************************************
struct sched_param; /* Defined in sched.h */
/********************************************************************************
* Global Variables
********************************************************************************/
/********************************************************************************
* Global Function Prototypes
************************************************************/
/*----------------------------------------------------------*
* Initializes a thread attributes object (attr) with default
* values for all of the individual attributes used by a
* given implementation.
*----------------------------------------------------------*/
********************************************************************************/
/* Initializes a thread attributes object (attr) with default values for all of
* the individual attributes used by a given implementation.
*/
EXTERN int pthread_attr_init(pthread_attr_t *attr);
/*----------------------------------------------------------*
* An attributes object can be deleted when it is no longer
* needed.
*----------------------------------------------------------*/
/* An attributes object can be deleted when it is no longer needed. */
EXTERN int pthread_attr_destroy(pthread_attr_t *attr);
/*----------------------------------------------------------*
* Set or obtain the default scheduling algorithm
*----------------------------------------------------------*/
/* Set or obtain the default scheduling algorithm */
EXTERN int pthread_attr_setschedpolicy(pthread_attr_t *attr,
int policy);
EXTERN int pthread_attr_getschedpolicy(pthread_attr_t *attr,
int *policy);
EXTERN int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
EXTERN int pthread_attr_getschedpolicy(pthread_attr_t *attr, int *policy);
EXTERN int pthread_attr_setschedparam(pthread_attr_t *attr,
const struct sched_param *param);
const struct sched_param *param);
EXTERN int pthread_attr_getschedparam(pthread_attr_t *attr,
struct sched_param *param);
EXTERN int pthread_attr_setinheritsched(pthread_attr_t *attr,
int inheritsched);
struct sched_param *param);
EXTERN int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched);
EXTERN int pthread_attr_getinheritsched(const pthread_attr_t *attr,
int *inheritsched);
int *inheritsched);
/*----------------------------------------------------------*
* Set or obtain the default stack size
*----------------------------------------------------------*/
/* Set or obtain the default stack size */
EXTERN int pthread_attr_setstacksize(pthread_attr_t *attr,
long stacksize);
EXTERN int pthread_attr_getstacksize(pthread_attr_t *attr,
long *stackaddr);
EXTERN int pthread_attr_setstacksize(pthread_attr_t *attr, long stacksize);
EXTERN int pthread_attr_getstacksize(pthread_attr_t *attr, long *stackaddr);
/*----------------------------------------------------------*
* To create a thread object and runnable thread, a routine
* must be specified as the new thread's start routine. An
* argument may be passed to this routine, as an untyped
* address; an untyped address may also be returned as the
* routine's value. An attributes object may be used to
* specify details about the kind of thread being created.
*----------------------------------------------------------*/
/* To create a thread object and runnable thread, a routine must be specified
* as the new thread's start routine. An argument may be passed to this
* routine, as an untyped address; an untyped address may also be returned as
* the routine's value. An attributes object may be used to specify details
* about the kind of thread being created.
*/
EXTERN int pthread_create(pthread_t *thread,
pthread_attr_t *attr,
pthread_startroutine_t startRoutine,
pthread_addr_t arg);
EXTERN int pthread_create(pthread_t *thread, pthread_attr_t *attr,
pthread_startroutine_t startroutine,
pthread_addr_t arg);
/*----------------------------------------------------------*
* A thread object may be "detached" to specify that the
* return value and completion status will not be requested.
*----------------------------------------------------------*/
/* A thread object may be "detached" to specify that the return value and
* completion status will not be requested.
*/
EXTERN int pthread_detach(pthread_t thread);
/*----------------------------------------------------------*
* A thread may terminate it's own execution or the
* execution of another thread.
*----------------------------------------------------------*/
/* A thread may terminate it's own execution or the execution of another
* thread.
*/
EXTERN void pthread_exit(pthread_addr_t value) noreturn_function;
EXTERN int pthread_cancel(pthread_t thread);
EXTERN int pthread_setcancelstate(int state, int *oldstate);
EXTERN void pthread_testcancel(void);
/*----------------------------------------------------------*
* A thread can await termination of another thread and retrieve
* the return value of the thread.
*----------------------------------------------------------*/
/* A thread can await termination of another thread and retrieve the return
* value of the thread.
*/
EXTERN int pthread_join(pthread_t thread,
pthread_addr_t *value);
EXTERN int pthread_join(pthread_t thread, pthread_addr_t *value);
/*----------------------------------------------------------*
* A thread may tell the scheduler that its processor can be
* made available.
*----------------------------------------------------------*/
/* A thread may tell the scheduler that its processor can be made available. */
EXTERN void pthread_yield(void);
/*----------------------------------------------------------*
* A thread may obtain a copy of its own thread handle.
*----------------------------------------------------------*/
/* A thread may obtain a copy of its own thread handle. */
#define pthread_self() ((pthread_t)getpid())
/*----------------------------------------------------------*
* Compare to thread IDs.
*----------------------------------------------------------*/
/* Compare two thread IDs. */
#define pthread_equal(t1,t2) (t1 == t2)
/*----------------------------------------------------------*
* Thread scheduling parameters
*----------------------------------------------------------*/
/* Thread scheduling parameters */
EXTERN int pthread_getschedparam(pthread_t thread,
int *policy,
struct sched_param *param);
EXTERN int pthread_getschedparam(pthread_t thread, int *policy,
struct sched_param *param);
EXTERN int pthread_setschedparam(pthread_t thread, int policy,
const struct sched_param *param);
const struct sched_param *param);
/*----------------------------------------------------------*
* Thread-specific Data Interfaces
*----------------------------------------------------------*/
/* Thread-specific Data Interfaces */
EXTERN int pthread_key_create(pthread_key_t *key,
FAR void (*destructor)(FAR void*));
@ -270,65 +241,43 @@ EXTERN int pthread_setspecific(pthread_key_t key, FAR void *value);
EXTERN FAR void *pthread_getspecific(pthread_key_t key);
EXTERN int pthread_key_delete(pthread_key_t key);
/*----------------------------------------------------------*
* Create, operate on, and destroy mutex attributes.
*----------------------------------------------------------*/
/* Create, operate on, and destroy mutex attributes. */
EXTERN int pthread_mutexattr_init(pthread_mutexattr_t *attr);
EXTERN int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);
EXTERN int pthread_mutexattr_getpshared(pthread_mutexattr_t *attr,
int *pshared);
EXTERN int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr,
int pshared);
EXTERN int pthread_mutexattr_getpshared(pthread_mutexattr_t *attr, int *pshared);
EXTERN int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared);
/*----------------------------------------------------------*
* The following routines create, delete, lock and unlock
* mutexes.
*----------------------------------------------------------*/
/* The following routines create, delete, lock and unlock mutexes. */
EXTERN int pthread_mutex_init(pthread_mutex_t *mutex,
pthread_mutexattr_t *attr);
EXTERN int pthread_mutex_init(pthread_mutex_t *mutex, pthread_mutexattr_t *attr);
EXTERN int pthread_mutex_destroy(pthread_mutex_t *mutex);
EXTERN int pthread_mutex_lock(pthread_mutex_t *mutex);
EXTERN int pthread_mutex_trylock(pthread_mutex_t *mutex);
EXTERN int pthread_mutex_unlock(pthread_mutex_t *mutex);
/*----------------------------------------------------------*
* Operations on condition variables
*----------------------------------------------------------*/
/* Operations on condition variables */
EXTERN int pthread_condattr_init(pthread_condattr_t *attr);
EXTERN int pthread_condattr_destroy(pthread_condattr_t *attr);
/*----------------------------------------------------------*
* A thread can create and delete condition variables.
*----------------------------------------------------------*/
/* A thread can create and delete condition variables. */
EXTERN int pthread_cond_init(pthread_cond_t *cond,
pthread_condattr_t *attr);
EXTERN int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *attr);
EXTERN int pthread_cond_destroy(pthread_cond_t *cond);
/*----------------------------------------------------------*
* A thread can signal to and broadcast on a condition variable.
*----------------------------------------------------------*/
/* A thread can signal to and broadcast on a condition variable. */
EXTERN int pthread_cond_broadcast(pthread_cond_t *cond);
EXTERN int pthread_cond_signal(pthread_cond_t *cond);
/*----------------------------------------------------------*
* A thread can wait for a condition variable to be signalled
* or broadcast.
*----------------------------------------------------------*/
/* A thread can wait for a condition variable to be signalled or broadcast. */
EXTERN int pthread_cond_wait(pthread_cond_t *cond,
pthread_mutex_t *mutex);
EXTERN int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
/*----------------------------------------------------------*
* A thread can perform a timed wait on a condition variable.
*----------------------------------------------------------*/
/* A thread can perform a timed wait on a condition variable. */
EXTERN int pthread_cond_timedwait(pthread_cond_t *cond,
pthread_mutex_t *mutex,
EXTERN int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
const struct timespec *abstime);
#undef EXTERN

View File

@ -1,4 +1,4 @@
/************************************************************
/********************************************************************************
* sched.h
*
* Copyright (C) 2007 Gregory Nutt. All rights reserved.
@ -31,231 +31,48 @@
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
************************************************************/
********************************************************************************/
#ifndef __SCHED_H
#define __SCHED_H
/************************************************************
/********************************************************************************
* Included Files
************************************************************/
********************************************************************************/
#include <nuttx/config.h>
#include <queue.h>
#include <signal.h>
#include <semaphore.h>
#include <pthread.h>
#include <mqueue.h>
#include <time.h>
#include <nuttx/irq.h>
#include <nuttx/sched.h>
/************************************************************
/********************************************************************************
* Definitions
************************************************************/
********************************************************************************/
/* Task Management Definitins *******************************/
/* Task Management Definitins ***************************************************/
/* This is the maximum number of times that a lock can be set */
/* POSIX-like scheduling policies */
#define MAX_LOCK_COUNT 127
#define SCHED_FIFO 1 /* FIFO per priority scheduling policy */
#define SCHED_RR 2 /* Round robin scheduling policy */
#define SCHED_OTHER 4 /* Not used */
/* Values for the _TCB flags flag bits */
#define TCB_FLAG_PTHREAD 0x0001 /* Thread is a pthread */
#define TCB_FLAG_NONCANCELABLE 0x0002 /* Pthread is non-cancelable */
#define TCB_FLAG_CANCEL_PENDING 0x0004 /* Pthread cancel is pending */
#define TCB_FLAG_ROUND_ROBIN 0x0008 /* Round robin sched enabled */
/* Pthread definitions **************************************/
/* Pthread definitions **********************************************************/
#define PTHREAD_KEYS_MAX CONFIG_NPTHREAD_KEYS
/************************************************************
/********************************************************************************
* Global Type Definitions
************************************************************/
********************************************************************************/
#ifndef __ASSEMBLY__
/* This is the POSIX-like scheduling parameter structure */
/* General Task Management Types ****************************/
/* This is the type of the task_state field of the TCB.
* NOTE: the order and content of this enumeration is
* critical since there are some OS tables indexed by these
* values.
*/
typedef enum tstate_e
struct sched_param
{
TSTATE_TASK_INVALID = 0, /* INVALID - TCB has not yet been initialized */
TSTATE_TASK_PENDING = 1, /* READY_TO_RUN - Pending preemption unlock */
TSTATE_TASK_READYTORUN = 2, /* READY-TO-RUN - But not running */
TSTATE_TASK_RUNNING = 3, /* READY_TO_RUN - And running */
TSTATE_TASK_INACTIVE = 4, /* BLOCKED - Initialized but not yet activated */
TSTATE_WAIT_SEM = 5, /* BLOCKED - Waiting for a semaphore */
#ifndef CONFIG_DISABLE_SIGNALS
TSTATE_WAIT_SIG = 6, /* BLOCKED - Waiting for a signal */
#endif
#ifndef CONFIG_DISABLE_MQUEUE
TSTATE_WAIT_MQNOTEMPTY, /* BLOCKED - Waiting for a MQ to become not empty. */
TSTATE_WAIT_MQNOTFULL /* BLOCKED - Waiting for a MQ to become not full. */
#endif
int sched_priority;
};
typedef enum tstate_e tstate_t;
/* The following definitions are determined by tstate_t */
#define FIRST_READY_TO_RUN_STATE TSTATE_TASK_READYTORUN
#define LAST_READY_TO_RUN_STATE TSTATE_TASK_RUNNING
#define FIRST_BLOCKED_STATE TSTATE_TASK_INACTIVE
#ifndef CONFIG_DISABLE_MQUEUE
# define LAST_BLOCKED_STATE TSTATE_WAIT_MQNOTFULL
# ifndef CONFIG_DISABLE_SIGNALS
# define NUM_TASK_STATES 9
# else
# define NUM_TASK_STATES 8
# endif
#else
# ifndef CONFIG_DISABLE_SIGNALS
# define LAST_BLOCKED_STATE TSTATE_WAIT_SIG
# define NUM_TASK_STATES 7
# else
# define LAST_BLOCKED_STATE TSTATE_WAIT_SEM
# define NUM_TASK_STATES 6
# endif
#endif
/* The following is the form of a thread start-up function */
typedef void (*start_t)(void);
/* This is the entry point into the main thread of the task
* or into a created pthread within the task.
*/
union entry_u
{
pthread_startroutine_t pthread;
main_t main;
};
typedef union entry_u entry_t;
/* This is the type of the function that is executed with
* exit() is called (if registered via atexit()).
*/
typedef void (*exitfunc_t)(void);
/* POSIX Message queue */
typedef struct msgq_s msgq_t;
/* This is the task control block (TCB) */
struct _TCB
{
/* Fields used to support list management ***************************/
FAR struct _TCB *flink; /* link in DQ of TCBs */
FAR struct _TCB *blink;
/* Task Management Fields *******************************************/
pid_t pid; /* This is the ID of the thread */
start_t start; /* Thread start function */
entry_t entry; /* Entry Point into the thread */
exitfunc_t exitfunc; /* Called if exit is called. */
ubyte sched_priority; /* Current priority of the thread */
tstate_t task_state; /* Current state of the thread */
uint16 flags; /* Misc. general status flags */
sint16 lockcount; /* 0=preemptable (not-locked) */
FAR void *joininfo; /* Detach-able info to support join */
#if CONFIG_RR_INTERVAL > 0
int timeslice; /* RR timeslice interval remaining */
#endif
/* Values needed to restart a task **********************************/
ubyte init_priority; /* Initial priority of the task */
char *argv[CONFIG_MAX_TASK_ARGS+1]; /* Name+start-up parameters */
/* Stack-Related Fields *********************************************/
#ifndef CONFIG_CUSTOM_STACK
size_t adj_stack_size; /* Stack size after adjustment */
/* for hardware, processor, etc. */
/* (for debug purposes only) */
FAR void *stack_alloc_ptr; /* Pointer to allocated stack */
/* Need to deallocate stack */
FAR void *adj_stack_ptr; /* Adjusted stack_alloc_ptr for HW */
/* The initial stack pointer value */
#endif
/* POSIX thread Specific Data ***************************************/
#if !defined(CONFIG_DISABLE_PTHREAD) && CONFIG_NPTHREAD_KEYS > 0
FAR void *pthread_data[CONFIG_NPTHREAD_KEYS];
#endif
/* POSIX Semaphore Control Fields ***********************************/
sem_t *waitsem; /* Semaphore ID waiting on */
/* POSIX Signal Control Fields **************************************/
#ifndef CONFIG_DISABLE_SIGNALS
sigset_t sigprocmask; /* Signals that are blocked */
sigset_t sigwaitmask; /* Waiting for pending signals */
sq_queue_t sigactionq; /* List of actions for signals */
sq_queue_t sigpendingq; /* List of Pending Signals */
sq_queue_t sigpendactionq; /* List of pending signal actions */
sq_queue_t sigpostedq; /* List of posted signals */
siginfo_t sigunbinfo; /* Signal info when task unblocked */
#endif
/* POSIX Named Message Queue Fields *********************************/
#ifndef CONFIG_DISABLE_MQUEUE
sq_queue_t msgdesq; /* List of opened message queues */
FAR msgq_t *msgwaitq; /* Waiting for this message queue */
#endif
/* Library related fields *******************************************/
int errno; /* Current per-thread errno */
/* File system support **********************************************/
#if CONFIG_NFILE_DESCRIPTORS > 0
FAR struct filelist *filelist; /* Maps file descriptor to file */
#endif
#if CONFIG_NFILE_STREAMS > 0
FAR struct streamlist *streams; /* Holds C buffered I/O info */
#endif
/* State save areas *************************************************/
/* The form and content of these fields are processor-specific. */
struct xcptcontext xcp; /* Interrupt register save area */
#if CONFIG_TASK_NAME_SIZE > 0
char name[CONFIG_TASK_NAME_SIZE]; /* Task name */
#endif
};
typedef struct _TCB _TCB;
/* This is the callback type used by sched_foreach() */
typedef void (sched_foreach_t)(FAR _TCB *tcb, FAR void *arg);
#endif /* __ASSEMBLY__ */
/************************************************************
/********************************************************************************
* Global Function Prototypes
************************************************************/
********************************************************************************/
#ifndef __ASSEMBLY__
#undef EXTERN
@ -289,18 +106,15 @@ EXTERN STATUS task_restart(pid_t pid);
/* Task Scheduling Interfaces (based on POSIX APIs) */
EXTERN int sched_setparam(pid_t pid,
const struct sched_param *param);
EXTERN int sched_getparam(pid_t pid,
struct sched_param *param);
EXTERN int sched_setparam(pid_t pid, const struct sched_param *param);
EXTERN int sched_getparam(pid_t pid, struct sched_param *param);
EXTERN int sched_setscheduler(pid_t pid, int policy,
const struct sched_param *param);
EXTERN int sched_getscheduler(pid_t pid);
EXTERN int sched_yield(void);
EXTERN int sched_get_priority_max(int policy);
EXTERN int sched_get_priority_min(int policy);
EXTERN int sched_rr_get_interval(pid_t pid,
struct timespec *interval);
EXTERN int sched_rr_get_interval(pid_t pid, struct timespec *interval);
/* Task Switching Interfaces (non-standard) */
@ -314,9 +128,9 @@ EXTERN sint32 sched_lockcount(void);
#ifdef CONFIG_SCHED_INSTRUMENTATION
EXTERN void sched_note_start(FAR _TCB *tcb );
EXTERN void sched_note_stop(FAR _TCB *tcb );
EXTERN void sched_note_switch(FAR _TCB *pFromTcb, FAR _TCB *pToTcb);
EXTERN void sched_note_start(FAR _TCB *tcb );
EXTERN void sched_note_stop(FAR _TCB *tcb );
EXTERN void sched_note_switch(FAR _TCB *pFromTcb, FAR _TCB *pToTcb);
#else
# define sched_note_start(t)
@ -324,22 +138,6 @@ EXTERN void sched_note_switch(FAR _TCB *pFromTcb, FAR _TCB *pToTcb);
# define sched_note_switch(t1, t2)
#endif /* CONFIG_SCHED_INSTRUMENTATION */
/* File system helpers */
#if CONFIG_NFILE_DESCRIPTORS > 0
EXTERN FAR struct filelist *sched_getfiles(void);
#if CONFIG_NFILE_STREAMS > 0
EXTERN FAR struct streamlist *sched_getstreams(void);
#endif /* CONFIG_NFILE_STREAMS */
#endif /* CONFIG_NFILE_DESCRIPTORS */
/* sched_foreach will enumerate over each task and provide the
* TCB of each task to a user callback functions. Interrupts
* will be disabled throughout this enumeration!
*/
EXTERN void sched_foreach(sched_foreach_t handler, FAR void *arg);
#undef EXTERN
#if defined(__cplusplus)
}

View File

@ -41,6 +41,7 @@
************************************************************/
#include <sys/types.h>
#include <limits.h>
#ifdef __cplusplus
#define EXTERN extern "C"
@ -53,14 +54,6 @@ extern "C" {
* Definitions
************************************************************/
/* The maximum value that a semaphore may have. */
#define SEM_MAX_VALUE 0x7fff /* Max value POSIX counting semaphore */
/* The maximum number of semaphores that a task may have */
#define SEM_NSEMS_MAX 0x7fffffff
/************************************************************
* Public Type Declarations
************************************************************/

View File

@ -1,4 +1,4 @@
/************************************************************
/********************************************************************************
* signal.h
*
* Copyright (C) 2007 Gregory Nutt. All rights reserved.
@ -31,27 +31,27 @@
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
************************************************************/
********************************************************************************/
#ifndef __SIGNAL_H
#define __SIGNAL_H
/************************************************************
/********************************************************************************
* Included Files
************************************************************/
********************************************************************************/
#include <nuttx/config.h>
#include <nuttx/compiler.h>
#include <time.h> /* Needed for struct timespec */
#include <sys/types.h> /* Needed for, e.g., sigset_t */
/************************************************************
/********************************************************************************
* Compilations Switches
************************************************************/
********************************************************************************/
/************************************************************
/********************************************************************************
* Definitions
************************************************************/
********************************************************************************/
/* Signal set management definitions and macros. */
@ -62,13 +62,18 @@
#define GOOD_SIGNO(s) (((s)>=MIN_SIGNO)&&((s)<=MAX_SIGNO))
#define SIGNO2SET(s) ((sigset_t)1 << (s))
/* All signals are "real time" signals */
#define SIGRTMIN 0 /* First real time signal */
#define SIGRTMAX 31 /* Last real time signal */
/* sigprocmask() "how" definitions. Only one of the following
* can be specified:
*/
#define SIG_BLOCK 1
#define SIG_UNBLOCK 2
#define SIG_SETMASK 3
#define SIG_BLOCK 1 /* Block the given signals */
#define SIG_UNBLOCK 2 /* Unblock the given signals */
#define SIG_SETMASK 3 /* Set the signal mask to the current set */
/* struct sigaction flag values */
@ -80,19 +85,25 @@
/* Dummy value for the sigev_notify field of struct sigevent */
#define SIGEV_SIGNAL 0
#define SIGEV_SIGNAL 0
/* These are the possible values of the signfo si_code field */
#define SI_QUEUE 0 /* Signal sent from sigqueue */
#define SI_MESGQ 1 /* Signal generated by arrival of a message on an
* empty message queue */
#define SI_NOWAIT 2 /* Signal already pending -- don't know how sent */
#define SI_TIMEOUT 3 /* No-signal, unblocked by timeout */
#define SI_USER 0 /* Signal sent from kill, raise, or abort */
#define SI_QUEUE 1 /* Signal sent from sigqueue */
#define SI_TIMER 2 /* Signal is result of timer expiration */
#define SI_ASYNCIO 3 /* Signal is the result of asynch IO completion */
#define SI_MESGQ 4 /* Signal generated by arrival of a message on an */
/* empty message queue */
/************************************************************
/* sigevent definitions */
#define SIGEV_NONE 0 /* No notification desired */
#define SIGEV_SIGNAL 1 /* Notify via signal */
/********************************************************************************
* Global Type Declarations
************************************************************/
********************************************************************************/
/* This defines a set of 32 signals (numbered 0 through 31). */
@ -106,6 +117,18 @@ union sigval
void *sival_ptr;
};
/* This structure contains elements that define a queue signal.
* The following is used to attach a signal to a message queue
* to notify a task when a message is available on a queue
*/
struct sigevent
{
int sigev_signo; /* Notification: SIGNAL or NONE */
union sigval sigev_value; /* Generate this signal */
int sigev_notify; /* Queue this value */
};
/* The following types is used to pass parameters to/from
* signal handlers
*/
@ -132,13 +155,13 @@ struct sigaction
#define sa_handler sa_u._sa_handler
#define sa_sigaction sa_u._sa_sigaction
/************************************************************
/********************************************************************************
* Global Variables
************************************************************/
********************************************************************************/
/************************************************************
/********************************************************************************
* Global Function Prototypes
************************************************************/
********************************************************************************/
#ifdef __cplusplus
#define EXTERN extern "C"
@ -147,26 +170,21 @@ extern "C" {
#define EXTERN extern
#endif
EXTERN int kill(pid_t, int);
EXTERN int sigemptyset(sigset_t *set);
EXTERN int sigfillset(sigset_t *set);
EXTERN int sigaddset(sigset_t *set, int signo);
EXTERN int sigdelset(sigset_t *set, int signo);
EXTERN int sigismember(const sigset_t *set, int signo);
EXTERN int sigaction(int sig,
const struct sigaction *act,
struct sigaction *oact);
EXTERN int sigprocmask(int how, const sigset_t *set,
sigset_t *oset);
EXTERN int sigaction(int sig, const struct sigaction *act, struct sigaction *oact);
EXTERN int sigprocmask(int how, const sigset_t *set, sigset_t *oset);
EXTERN int sigpending(sigset_t *set);
EXTERN int sigsuspend(const sigset_t *sigmask);
EXTERN int sigwaitinfo(const sigset_t *set,
struct siginfo *value);
EXTERN int sigtimedwait(const sigset_t *set,
struct siginfo *value,
const struct timespec *timeout);
EXTERN int sigwaitinfo(const sigset_t *set, struct siginfo *value);
EXTERN int sigtimedwait(const sigset_t *set, struct siginfo *value,
const struct timespec *timeout);
#ifdef CONFIG_CAN_PASS_STRUCTS
EXTERN int sigqueue(int pid, int signo,
const union sigval value);
EXTERN int sigqueue(int pid, int signo, const union sigval value);
#else
EXTERN int sigqueue(int pid, int signo, void *sival_ptr);
#endif

View File

@ -59,37 +59,6 @@
#define EOF (-1)
/* File I/O constants ***************************************/
#define PATH_MAX 101
#define S_IFMT 0170000
#define S_IFIFO 0010000
#define S_IFCHR 0020000
#define S_IFDIR 0040000
#define S_IFBLK 0060000
#define S_IFREG 0100000
#define S_IFLNK 0120000
#define S_IFSOCK 0140000
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
/* Wind-River IOCTL constants */
#define FIOFLUSH 2
#define FIONBIO 16
#define FIOSELECT 28
#define FIOUNSELECT 29
#define FIOTRUNC 42
#define FIOHANDLETONAME 45
#define FIOLABELGET 33
#define SET_HIDDEN 0x1004
#define PHYS_BLK_IO 255
#define SECTOR_ALIGN_BYTES 512
#define FILE_BUF_SIZE (4 * SECTOR_ALIGN_BYTES)
#define FILE_BUF_ALIGN_BYTES 16
/* The first three _iob entries are reserved for standard I/O */
#define stdin (&sched_getstreams()->sl_streams[0])
@ -106,7 +75,6 @@
#define getchar() fgetc(stdin)
#define ftell(s) fseek((s),0,SEEK_CUR)
#define rewind(s) ((void)fseek((s),0,SEEK_SET))
#define fsync(f)
/************************************************************
* Public Type Definitions
@ -197,21 +165,14 @@ EXTERN int vsprintf(char *buf, const char *s, va_list ap);
/* POSIX-like File System Interfaces */
EXTERN int chdir(const char *path);
EXTERN int close(int fd);
EXTERN int creat(const char *path, mode_t mode);
EXTERN FILE *fdopen(int fd, const char *type);
EXTERN int fstat(int fd, FAR struct stat *buf);
EXTERN char *getcwd(FAR char *buf, size_t size);
EXTERN int ioctl(int fd, int req, unsigned long arg);
EXTERN off_t lseek(int fd, off_t offset, int whence);
EXTERN int mkdir(const char *path, mode_t mode);
EXTERN int open(const char *path, int oflag, ...);
EXTERN int read(int fd, void *buf, unsigned int nbytes);
EXTERN int rmdir(const char *path);
EXTERN int stat(const char *path, FAR struct stat *buf);
EXTERN int statfs(const char *path, FAR struct statfs *buf);
EXTERN int unlink(const char *path);
EXTERN int write(int fd, const void *buf, unsigned int nbytes);
#undef EXTERN
#if defined(__cplusplus)

View File

@ -69,12 +69,6 @@
#undef OK
#define OK 0
/* POSIX-like scheduling policies (only SCHED_FIFO is supported) */
#define SCHED_FIFO 1 /* FIFO per priority scheduling policy */
#define SCHED_RR 2 /* Round robin scheduling policy */
#define SCHED_OTHER 4 /* Not used */
/* HPUX-like MIN/MAX value */
#define PRIOR_RR_MIN 0
@ -92,22 +86,6 @@
#define SCHED_PRIORITY_MIN 1
#define SCHED_PRIORITY_IDLE 0
/* oflag bit settings for sem_open and mq_open */
#define O_RDONLY 0x01 /* Open for read access */
#define O_WRONLY 0x02 /* Open for write access */
#define O_RDWR 0x03 /* Open for both read & write access */
#define O_CREAT 0x04 /* Create semaphore/message queue */
#define O_EXCL 0x08 /* Name must not exist when opened */
#define O_APPEND 0x10
#define O_TRUNC 0x20
#define O_NONBLOCK 0x40 /* Don't wait for data */
#define O_NDELAY O_NONBLOCK
#define O_LOCK 0x80
#define O_RDOK O_RDONLY /* Not POSIX */
#define O_WROK O_WRONLY /* Not POSIX */
/************************************************************
* Type Declarations
************************************************************/
@ -144,12 +122,6 @@ typedef int STATUS;
typedef int (*main_t)(int argc, char *argv[]);
/* This is the POSIX-like scheduling parameter structure */
struct sched_param
{
int sched_priority;
};
#endif
/************************************************************

View File

@ -1,4 +1,4 @@
/************************************************************
/********************************************************************************
* time.h
*
* Copyright (C) 2007 Gregory Nutt. All rights reserved.
@ -31,49 +31,44 @@
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
************************************************************/
********************************************************************************/
#ifndef _TIME_H_
#define _TIME_H_
/************************************************************
/********************************************************************************
* Included Files
************************************************************/
********************************************************************************/
#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
extern "C" {
#else
#define EXTERN extern
#endif
#include <nuttx/config.h>
#include <sys/types.h>
/************************************************************
/********************************************************************************
* Compilations Switches
************************************************************/
********************************************************************************/
/************************************************************
/********************************************************************************
* Definitions
************************************************************/
********************************************************************************/
/* This must be set to the last known date */
/* Clock tick of the system */
#define CURRENT_YEAR 2000
#define CURRENT_MONTH 5
#define CURRENT_DAY 22
#define CLK_TCK 100
/* This is the only clock_id supported by the "Clock and Timer
* Functions."
*/
#define CLOCK_REALTIME 0
#define CLOCK_ABSTIME
/************************************************************
/********************************************************************************
* Global Type Declarations
************************************************************/
********************************************************************************/
typedef long time_t;
typedef long clockid_t;
typedef uint32 time_t;
typedef ubyte clockid_t;
typedef ubyte timer_t;
struct timespec
{
@ -102,22 +97,51 @@ struct tm
#endif
};
/************************************************************
/* Struct itimerspec is used to define settings for an interval timer */
struct itimerspec
{
struct timespec it_value; /* First time */
struct timespec it_interval; /* and thereafter */
};
/* forward reference (defined in signal.h) */
struct sigevent;
/********************************************************************************
* Global Variables
************************************************************/
********************************************************************************/
/************************************************************
/* extern char *tznames[]; not supported */
/********************************************************************************
* Global Function Prototypes
************************************************************/
********************************************************************************/
EXTERN int clock_settime(clockid_t clock_id, const struct timespec *tp);
EXTERN int clock_gettime(clockid_t clock_id, struct timespec *tp);
EXTERN int clock_getres(clockid_t clock_id, struct timespec *res);
#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
extern "C" {
#else
#define EXTERN extern
#endif
EXTERN int clock_settime(clockid_t clockid, const struct timespec *tp);
EXTERN int clock_gettime(clockid_t clockid, struct timespec *tp);
EXTERN int clock_getres(clockid_t clockid, struct timespec *res);
EXTERN time_t mktime(struct tm *tp);
EXTERN struct tm *gmtime_r(const time_t *clock, struct tm *result);
#define localtime_r(c,r) gmtime_r(c,r)
EXTERN int timer_create(clockid_t clockid, struct sigevent *evp, timer_t *timerid);
EXTERN int timer_delete(timer_t timerid);
EXTERN int timer_settime(timer_t timerid, int flags, const struct itimerspec *value,
struct itimerspec *ovalue);
EXTERN int timer_gettime(timer_t timerid, struct itimerspec *value);
EXTERN int timer_getoverrun(timer_t timerid);
#undef EXTERN
#if defined(__cplusplus)
}

View File

@ -53,6 +53,49 @@
#define ATEXIT_MAX 1
/* Values for seeking */
#define SEEK_SET 0 /* From the start of the file */
#define SEEK_CUR 1 /* From the current file offset */
#define SEEK_END 2 /* From the end of the file */
/* Bit values for the second argument to access */
#define F_OK 0 /* Test existence */
#define R_OK 1 /* Test read permission */
#define W_OK 2 /* Test write permission */
#define X_OK 4 /* Test execute permission */
/* POSIX feature set macros */
#define POSIX_VERSION
#undef _POSIX_SAVED_IDS
#undef _POSIX_JOB_CONTROL
#define _POSIX_REALTIME_SIGNALS 1
#define _POSIX_MESSAGE_PASSING 1
#undef _POSIX_MAPPED_FILES
#undef _POSIX_SHARED_MEMORY_OBJECTS
#define _POSIX_PRIORITY_SCHEDULING 1
#define _POSIX_TIMERS
#undef _POSIX_MEMLOCK
#undef _POSIX_MEMLOCK_RANGE
#undef _POSIX_FSYNC
#define _POSIX_SYNCHRONIZED_IO
#undef _POSIX_ASYNCHRONOUS_IO
#undef _POSIX_PRIORITIZED_IO
/* Execution time constants (not supported) */
#undef _POSIX_CHOWN_RESTRICTED
#undef _POSIX_NO_TRUNC
#undef _POSIX_VDISABLE
#define _POSIX_SYNC_IO
#undef _POSIX_ASYNC_IO
#undef _POSIX_PRIO_IO
#define fsync(f)
/************************************************************
* Global Function Prototypes
************************************************************/
@ -70,12 +113,17 @@ extern "C" {
EXTERN pid_t getpid(void);
EXTERN void _exit(int status) noreturn_function;
EXTERN unsigned int sleep(unsigned int seconds);
EXTERN void usleep(unsigned long usec);
EXTERN void usleep(unsigned long usec);
/* File descriptor operations */
EXTERN int dup(int fildes);
EXTERN int dup2(int fildes1, int fildes2);
EXTERN int close(int fd);
EXTERN int dup(int fildes);
EXTERN int dup2(int fildes1, int fildes2);
EXTERN off_t lseek(int fd, off_t offset, int whence);
EXTERN int read(int fd, void *buf, unsigned int nbytes);
EXTERN int unlink(const char *path);
EXTERN int write(int fd, const void *buf, unsigned int nbytes);
#undef EXTERN
#if defined(__cplusplus)

View File

@ -44,6 +44,7 @@
#include <nuttx/config.h>
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

View File

@ -43,6 +43,8 @@
#include <nuttx/config.h> /* for CONFIG_STDIO_BUFFER_SIZE */
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <nuttx/fs.h>
#include "lib_internal.h"

View File

@ -37,7 +37,9 @@
* Included Files
************************************************************/
#include <nuttx/config.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <ctype.h>
#include <debug.h>

View File

@ -45,6 +45,8 @@
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
#include "lib_internal.h"

View File

@ -57,27 +57,6 @@
* Private Functions
************************************************************/
#if CONFIG_NFILE_STREAMS > 0
static void _lib_semtake(FAR struct streamlist *list)
{
/* Take the semaphore (perhaps waiting) */
while (sem_wait(&list->sl_sem) != 0)
{
/* The only case that an error should occr here is if
* the wait was awakened by a signal.
*/
ASSERT(*get_errno_ptr() == EINTR);
}
}
# define _lib_semgive(list) sem_post(&list->sl_sem)
#else
# define _lib_semtake(list)
# define _lib_semgive(list)
#endif
/************************************************************
* Public Functions
************************************************************/

View File

@ -43,7 +43,9 @@
#include <nuttx/config.h> /* for CONFIG_STDIO_BUFFER_SIZE */
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include "lib_internal.h"

View File

@ -43,6 +43,7 @@
#include <nuttx/config.h> /* for CONFIG_STDIO_BUFFER_SIZE */
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include "lib_internal.h"

View File

@ -37,7 +37,7 @@
* Included Files
************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include "lib_internal.h"

View File

@ -42,8 +42,8 @@
************************************************************/
#include <nuttx/config.h>
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <nuttx/fs.h>
#include "lib_internal.h"

View File

@ -41,6 +41,7 @@
************************************************************/
#include <sys/types.h>
#include <limits.h>
#include <mqueue.h>
#include <sched.h>
#include <signal.h>
@ -57,7 +58,7 @@
#define MQ_MAX_BYTES CONFIG_MQ_MAXMSGSIZE
#define MQ_MAX_HWORDS ((MQ_MAX_BYTES + sizeof(uint16) - 1) / sizeof(uint16))
#define MQ_MAX_MSGS 16
#define MQ_PRIO_MAX 255
#define MQ_PRIO_MAX _POSIX_MQ_PRIO_MAX
/* This defines the number of messages descriptors to allocate
* at each "gulp."

View File

@ -38,6 +38,7 @@
************************************************************/
#include <sys/types.h> /* uint32, etc. */
#include <signal.h>
#include <mqueue.h>
#include <sched.h>
#include "os_internal.h"

View File

@ -40,6 +40,7 @@
#include <sys/types.h> /* uint32, etc. */
#include <stdarg.h> /* va_list */
#include <mqueue.h>
#include <fcntl.h>
#include <string.h>
#include <sched.h>
#include <errno.h>

View File

@ -40,6 +40,7 @@
#include <sys/types.h> /* uint32, etc. */
#include <stdarg.h> /* va_list */
#include <unistd.h>
#include <fcntl.h> /* O_NONBLOCK */
#include <string.h>
#include <assert.h>
#include <mqueue.h>
@ -183,7 +184,7 @@ int mq_receive(mqd_t mqdes, void *msg, size_t msglen, int *prio)
/* Copy the message into the caller's buffer */
memcpy(msg, (void*)curr->mail, rcvmsglen);
memcpy(msg, (const void*)curr->mail, rcvmsglen);
/* Copy the message priority as well (if a buffer is provided) */

View File

@ -40,6 +40,7 @@
#include <nuttx/compiler.h>
#include <nuttx/kmalloc.h>
#include <sys/types.h> /* uint32, etc. */
#include <fcntl.h>
#include <mqueue.h>
#include <string.h>
#include <sched.h>
@ -306,7 +307,7 @@ int mq_send(mqd_t mqdes, const void *msg, size_t msglen, int prio)
/* Copy the message data into the message */
memcpy((const void*)curr->mail, (void*)msg, msglen);
memcpy((void*)curr->mail, (const void*)msg, msglen);
/* Insert the new message in the message queue */

View File

@ -38,6 +38,7 @@
************************************************************/
#include <sys/types.h> /* uint32, etc. */
#include <fcntl.h> /* O_NONBLOCK */
#include <mqueue.h>
#include "mq_internal.h"

View File

@ -40,6 +40,7 @@
#include <sys/types.h>
#include <pthread.h>
#include <string.h>
#include <sched.h>
#include <debug.h>
#include <errno.h>
#include "pthread_internal.h"

View File

@ -40,6 +40,7 @@
#include <sys/types.h>
#include <pthread.h>
#include <string.h>
#include <sched.h>
#include <debug.h>
#include <errno.h>
#include "pthread_internal.h"

View File

@ -40,6 +40,7 @@
#include <sys/types.h>
#include <pthread.h>
#include <string.h>
#include <sched.h>
#include <debug.h>
#include <errno.h>
#include "pthread_internal.h"

View File

@ -39,6 +39,7 @@
#include <nuttx/config.h>
#include <sys/types.h>
#include <string.h>
#include <pthread.h>
#include <sched.h>
#include <debug.h>
@ -408,7 +409,7 @@ int pthread_create(pthread_t *thread, pthread_attr_t *attr,
else
{
sched_unlock();
dq_rem((FAR dq_entry_t*)ptcb, &g_inactivetasks);
dq_rem((FAR dq_entry_t*)ptcb, (dq_queue_t*)&g_inactivetasks);
(void)sem_destroy(&pjoin->data_sem);
(void)sem_destroy(&pjoin->exit_sem);
sched_releasetcb(ptcb);

View File

@ -102,13 +102,13 @@ void sched_addblocked(FAR _TCB *btcb, tstate_t task_state)
{
/* Add the task to a prioritized list */
sched_addprioritized(btcb, g_tasklisttable[task_state].list);
sched_addprioritized(btcb, (dq_queue_t*)g_tasklisttable[task_state].list);
}
else
{
/* Add the task to a non-prioritized list */
dq_addlast((FAR dq_entry_t*)btcb, g_tasklisttable[task_state].list);
dq_addlast((FAR dq_entry_t*)btcb, (dq_queue_t*)g_tasklisttable[task_state].list);
}
/* Make sure the TCB's state corresponds to the list */

View File

@ -111,14 +111,14 @@ boolean sched_addreadytorun(FAR _TCB *btcb)
* task to the g_pendingtasks task list for now.
*/
sched_addprioritized(btcb, &g_pendingtasks);
sched_addprioritized(btcb, (dq_queue_t*)&g_pendingtasks);
btcb->task_state = TSTATE_TASK_PENDING;
ret = FALSE;
}
/* Otherwise, add the new task to the g_readytorun task list */
else if (sched_addprioritized(btcb, &g_readytorun))
else if (sched_addprioritized(btcb, (dq_queue_t*)&g_readytorun))
{
/* Information the instrumentation logic that we are switching tasks */

View File

@ -93,7 +93,7 @@ void sched_free(FAR void *address)
/* Yes.. Delay the deallocation until a more appropriate time. */
irqstate_t saved_state = irqsave();
sq_addlast((FAR sq_entry_t*)address, &g_delayeddeallocations);
sq_addlast((FAR sq_entry_t*)address, (sq_queue_t*)&g_delayeddeallocations);
irqrestore(saved_state);
}
else

View File

@ -103,7 +103,7 @@ void sched_removeblocked(FAR _TCB *btcb)
* with this state
*/
dq_rem((FAR dq_entry_t*)btcb, g_tasklisttable[task_state].list);
dq_rem((FAR dq_entry_t*)btcb, (dq_queue_t*)g_tasklisttable[task_state].list);
/* Make sure the TCB's state corresponds to not being in
* any list

View File

@ -110,7 +110,7 @@ boolean sched_removereadytorun(FAR _TCB *rtcb)
/* Remove the TCB from the ready-to-run list */
dq_rem((FAR dq_entry_t*)rtcb, &g_readytorun);
dq_rem((FAR dq_entry_t*)rtcb, (dq_queue_t*)&g_readytorun);
rtcb->task_state = TSTATE_TASK_INVALID;
return ret;

View File

@ -240,7 +240,7 @@ int sched_setparam(pid_t pid, const struct sched_param *param)
{
/* Remove the TCB from the prioritized task list */
dq_rem((FAR dq_entry_t*)tcb, g_tasklisttable[task_state].list);
dq_rem((FAR dq_entry_t*)tcb, (dq_queue_t*)g_tasklisttable[task_state].list);
/* Change the task priority */
@ -250,7 +250,7 @@ int sched_setparam(pid_t pid, const struct sched_param *param)
* position
*/
sched_addprioritized(tcb, g_tasklisttable[task_state].list);
sched_addprioritized(tcb, (dq_queue_t*)g_tasklisttable[task_state].list);
}
/* CASE 3b. The task resides in a non-prioritized list. */

View File

@ -40,6 +40,7 @@
#include <nuttx/config.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sched.h>
#include <errno.h>
#include "os_internal.h"

View File

@ -38,6 +38,7 @@
************************************************************/
#include <sys/types.h>
#include <limits.h>
#include <semaphore.h>
#include "sem_internal.h"
@ -100,7 +101,7 @@ int sem_init (sem_t *sem, int pshared, unsigned int value)
{
int ret = ERROR;
if (sem && value <= SEM_MAX_VALUE)
if (sem && value <= SEM_VALUE_MAX)
{
sem->semcount = (sint16)value;
ret = OK;

View File

@ -39,6 +39,8 @@
#include <sys/types.h>
#include <stdarg.h>
#include <limits.h>
#include <fcntl.h>
#include <string.h>
#include <semaphore.h>
#include <errno.h>
@ -105,7 +107,7 @@
* 1. mode_t mode (ignored), and
* 2. unsigned int value. This initial value of the semaphore.
* valid initial values of the semaphore must be less than
* or equal to SEM_MAX_VALUE.
* or equal to SEM_VALUE_MAX.
*
* Return Value:
* A pointer to sem_t or -1 (ERROR) if unsuccessful.
@ -170,7 +172,7 @@ FAR sem_t *sem_open (const char *name, int oflag, ...)
/* Verify that a legal initial value was selected. */
if (value <= SEM_MAX_VALUE)
if (value <= SEM_VALUE_MAX)
{
/* Allocate memory for the new semaphore */

View File

@ -38,6 +38,7 @@
************************************************************/
#include <sys/types.h>
#include <limits.h>
#include <semaphore.h>
#include <sched.h>
#include <nuttx/arch.h>
@ -123,7 +124,7 @@ int sem_post(sem_t *sem)
/* Perform the semaphore unlock operation. */
ASSERT(sem->semcount < SEM_MAX_VALUE);
ASSERT(sem->semcount < SEM_VALUE_MAX);
sem->semcount++;
/* If the result of of semaphore unlock is non-positive, then

View File

@ -106,7 +106,7 @@ static void sig_timeout(int argc, uint32 itcb, ...)
if (u.wtcb->task_state == TSTATE_WAIT_SIG)
{
u.wtcb->sigunbinfo.si_signo = ERROR;
u.wtcb->sigunbinfo.si_code = SI_TIMEOUT;
u.wtcb->sigunbinfo.si_code = SI_TIMER;
u.wtcb->sigunbinfo.si_value.sival_int = 0;
up_unblock_task(u.wtcb);
}
@ -138,11 +138,12 @@ static void sig_timeout(int argc, uint32 itcb, ...)
* generated by sigqueue().
*
* The following values for si_code are defined in signal.h:
* SI_USER - Signal sent from kill, raise, or abort
* SI_QUEUE - Signal sent from sigqueue
* SI_TIMER - Signal is result of timer expiration
* SI_ASYNCIO - Signal is the result of asynch IO completion
* SI_MESGQ - Signal generated by arrival of a message on an
* empty message queue
* SI_NOWAIT - Signal already pending -- don't know how sent
* SI_TIMEOUT - No Signal, restarted by timeout
* empty message queue.
*
* Parameters:
* set - The pending signal set.

View File

@ -170,7 +170,7 @@ int task_create(const char *name, int priority,
status = task_activate(tcb);
if (status != OK)
{
dq_rem((FAR dq_entry_t*)tcb, &g_inactivetasks);
dq_rem((FAR dq_entry_t*)tcb, (dq_queue_t*)&g_inactivetasks);
sched_releasetcb(tcb);
return ERROR;
}

View File

@ -148,7 +148,7 @@ STATUS task_delete(pid_t pid)
/* Remove the task from the OS's tasks lists. */
dq_rem((FAR dq_entry_t*)dtcb, g_tasklisttable[dtcb->task_state].list);
dq_rem((FAR dq_entry_t*)dtcb, (dq_queue_t*)g_tasklisttable[dtcb->task_state].list);
dtcb->task_state = TSTATE_TASK_INVALID;
irqrestore(saved_state);

View File

@ -139,7 +139,7 @@ STATUS task_restart(pid_t pid)
*/
state = irqsave();
dq_rem((FAR dq_entry_t*)tcb, g_tasklisttable[tcb->task_state].list);
dq_rem((FAR dq_entry_t*)tcb, (dq_queue_t*)g_tasklisttable[tcb->task_state].list);
tcb->task_state = TSTATE_TASK_INVALID;
irqrestore(state);
@ -159,7 +159,7 @@ STATUS task_restart(pid_t pid)
/* Add the task to the inactive task list */
dq_addfirst((FAR dq_entry_t*)tcb, &g_inactivetasks);
dq_addfirst((FAR dq_entry_t*)tcb, (dq_queue_t*)&g_inactivetasks);
tcb->task_state = TSTATE_TASK_INACTIVE;
/* Activate the task */
@ -167,7 +167,7 @@ STATUS task_restart(pid_t pid)
status = task_activate(tcb);
if (status != OK)
{
dq_rem((FAR dq_entry_t*)tcb, &g_inactivetasks);
dq_rem((FAR dq_entry_t*)tcb, (dq_queue_t*)&g_inactivetasks);
sched_releasetcb(tcb);
return ERROR;
}

View File

@ -201,7 +201,7 @@ STATUS task_schedsetup(FAR _TCB *tcb, int priority,
/* Add the task to the inactive task list */
sched_lock();
dq_addfirst((FAR dq_entry_t*)tcb, &g_inactivetasks);
dq_addfirst((FAR dq_entry_t*)tcb, (dq_queue_t*)&g_inactivetasks);
tcb->task_state = TSTATE_TASK_INACTIVE;
sched_unlock();
}