123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- OS Data Structures
- ==================
- Scalar Types
- ************
- Many of the types used to communicate with NuttX are simple scalar
- types. These types are used to provide architecture independence of the
- OS from the application. The scalar types used at the NuttX interface
- include:
- .. c:type:: pid_t
- .. c:type:: size_t
- .. c:type:: sigset_t
- .. c:type:: time_t
- Hidden Interface Structures
- ***************************
- Several of the types used to interface with NuttX are structures that
- are intended to be hidden from the application. From the standpoint of
- the application, these structures (and structure pointers) should be
- treated as simple handles to reference OS resources. These hidden
- structures include:
- .. c:struct:: tcb_s
- .. c:type:: mqd_t
- .. c:type:: sem_t
- .. c:type:: pthread_key_t
- In order to maintain portability, applications should not reference
- specific elements within these hidden structures. These hidden
- structures will not be described further in this user's manual.
- Access to the ``errno`` Variable
- ********************************
- A pointer to the thread-specific ``errno`` value is available through a
- function call:
- .. c:function:: int *__errno(void)
- ``__errno()`` returns a pointer to the thread-specific
- ``errno`` value. Note that the symbol ``errno`` is defined to be
- ``__errno()`` so that the usual access by referencing the symbol
- ``errno`` will work as expected.
- .. code-block:: c
- #include <errno.h>
- #define errno *__errno()
- int *__errno(void);
- There is a unique, private ``errno`` value for each NuttX task. However,
- the implementation of ``errno`` differs somewhat from the use of
- ``errno`` in most multi-threaded process environments: In NuttX, each
- pthread will also have its own private copy of ``errno`` and the
- ``errno`` will not be shared between pthreads. This is, perhaps,
- non-standard but promotes better thread independence.
- :return: A pointer to the thread-specific ``errno`` value.
- User Interface Structures
- *************************
- .. c:type:: int (*main_t)(int argc, char *argv[])
- :c:type:`main_t` defines the type of a task entry point. :c:type:`main_t` is declared in
- ``sys/types.h``.
- .. c:struct:: sched_param
- This structure is used to pass scheduling priorities to and from NuttX:
- .. code-block:: c
- struct sched_param
- {
- int sched_priority;
- };
- .. c:struct:: timespec
- This structure is used to pass timing information between the NuttX and
- a user application:
- .. code-block:: c
- struct timespec
- {
- time_t tv_sec; /* Seconds */
- long tv_nsec; /* Nanoseconds */
- };
- .. c:struct:: mq_attr
- This structure is used to communicate message queue attributes between
- NuttX and a MoBY application:
- .. code-block:: c
- 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 */
- };
- .. note that this gives a warning due to https://github.com/sphinx-doc/sphinx/issues/7819 https://github.com/sphinx-doc/sphinx/pull/8313
- .. c:struct:: sigaction
- The following structure defines the action to take for given signal:
- .. code-block:: c
- struct sigaction
- {
- union
- {
- void (*_sa_handler)(int);
- void (*_sa_sigaction)(int, siginfo_t *, void *);
- } sa_u;
- sigset_t sa_mask;
- int sa_flags;
- };
- #define sa_handler sa_u._sa_handler
- #define sa_sigaction sa_u._sa_sigaction
- .. c:struct:: siginfo
- .. c:type:: siginfo_t
- The following types is used to pass parameters to/from signal handlers:
- .. code-block:: c
- typedef struct siginfo
- {
- int si_signo;
- int si_code;
- union sigval si_value;
- } siginfo_t;
- .. c:union:: sigval
- This defines the type of the struct siginfo si_value field and is used
- to pass parameters with signals.
- .. code-block:: c
- union sigval
- {
- int sival_int;
- void *sival_ptr;
- };
- .. c:struct:: sigevent
- The following is used to attach a signal to a message queue to notify a
- task when a message is available on a queue.
- .. code-block:: c
- struct sigevent
- {
- int sigev_signo;
- union sigval sigev_value;
- int sigev_notify;
- };
|