root/nxos/base/interrupts.h

Revision 489:d8fdd8a1b11a, 3.1 kB (checked in by David Anderson <dave@…>, 13 months ago)

Make the declarations of all no-args functions strict.

void foo() doesn't actually constrain the function to having no args. For
that, an explicit void must be specified in the parameter list. This is just
a first pass over the source with sed to tighten our API up. The code still
needs manual review.

Line 
1/** @file interrupts.h
2 *  @brief Interrupts and task information.
3 */
4
5/* Copyright (C) 2007 the NxOS developers
6 *
7 * See AUTHORS for a full list of the developers.
8 *
9 * Redistribution of this file is permitted under
10 * the terms of the GNU Public License (GPL) version 2.
11 */
12
13#ifndef __NXOS_BASE_INTERRUPTS_H__
14#define __NXOS_BASE_INTERRUPTS_H__
15
16#include "base/types.h"
17
18/** @addtogroup kernel */
19/*@{*/
20
21/** @defgroup interrupt Interrupts and task information
22 *
23 * The Baseplate provides facilities for enabling and disabling
24 * interrupts, and for obtaining information about an interrupted user
25 * task.
26 *
27 * The Baseplate itself provides no scheduler, but its interrupt
28 * dispatch routine is tailored so that, when it interrupts code running
29 * in User/System mode, all the state is saved to the User/System mode
30 * stack. This makes the User/System mode task entirely self-contained
31 * within its stack pointer, which can be exchanged trivially for
32 * another to implement simple task switching.
33 */
34/*@{*/
35
36/** Globally disable interrupt handling.
37 *
38 * This function call can be nested. Internally, a counter counts the
39 * number of disables, and will require the same number of calls to
40 * nx_interrupts_enable() to reenable interrupt handling.
41 *
42 * @note Application kernels enter the main() function with interrupts
43 * already enabled.
44 *
45 * @warning The NXT cannot function for more than about a millisecond
46 * with interrupts disabled. Disabling them for too long will cause the
47 * coprocessor link to fail, which will bring the whole system crashing
48 * down. Use sparingly, for small critical sections.
49 *
50 * @sa nx_interrupts_enable
51 */
52void nx_interrupts_disable(void);
53
54/** Enable interrupt handling.
55 *
56 * Interrupt handling will only be reenabled if this function has been
57 * called the same number of times as nx_interrupts_disable().
58 */
59void nx_interrupts_enable(void);
60
61/** @brief The mapping of a user task's registers in the User/System stack.
62 *
63 * This structure should be used in an interrupt handler: cast the
64 * User/System stack pointer to a pointer to this structure, and
65 * dereference the fields to access the values of registers.
66 *
67 * @note This structure only works for user tasks. It does not
68 * accurately describe the content of any stack when there is no user
69 * mode task running.
70 */
71typedef struct {
72  U32 cpsr; /**< CPU status register. */
73  U32 pc; /**< Program Counter register. */
74  U32 r0; /**< General Purpose Register 0. */
75  U32 r1; /**< General Purpose Register 1. */
76  U32 r2; /**< General Purpose Register 2. */
77  U32 r3; /**< General Purpose Register 3. */
78  U32 r4; /**< General Purpose Register 4. */
79  U32 r5; /**< General Purpose Register 5. */
80  U32 r6; /**< General Purpose Register 6. */
81  U32 r7; /**< General Purpose Register 7. */
82  U32 r8; /**< General Purpose Register 8. */
83  U32 r9; /**< General Purpose Register 9. */
84  U32 r10; /**< General Purpose Register 10. */
85  U32 r11; /**< General Purpose Register 11. */
86  U32 r12; /**< General Purpose Register 12. */
87  U32 lr; /**< Link Register. */
88} nx_task_stack_t;
89
90/*@}*/
91/*@}*/
92
93#endif /* __NXOS_BASE_INTERRUPTS_H__ */
Note: See TracBrowser for help on using the browser.