1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-01-18 12:52:44 +01:00

core: improved doxygen documentation

improved files complient to issue #950
- thread.h
- flags.h
- debug.h
- crash.h
This commit is contained in:
Hauke Petersen 2014-04-01 11:46:21 +02:00
parent b06eaeeefd
commit 7df411e7b7
4 changed files with 137 additions and 52 deletions

View File

@ -14,7 +14,7 @@
* @brief Crash handling header
*
* Define a core_panic() function that allows to stop/reboot the system
* when an unrecoverable problem has occured.
* when an unrecoverable problem has occurred.
*
* @author Kévin Roussel <Kevin.Roussel@inria.fr>
*/
@ -24,18 +24,27 @@
#include "kernel.h"
/** Handle an unrecoverable error by halting or rebooting the system.
A numeric code indicating the failure reason can be given
as the ::crash_code parameter.
Detailing the failure is possible using the ::message parameter.
This function should serve a similar purpose as the panic()
function of Unix/Linux kernels.
If the DEVELHELP macro is defined, the system will be halted;
the system will be rebooted otherwise.
WARNING: this function NEVER returns! */
/**
* @brief Handle an unrecoverable error by halting or rebooting the system
*
* A numeric code indicating the failure reason can be given
* as the *crash_code* parameter.
*
* Detailing the failure is possible using the *message* parameter.
* This function should serve a similar purpose as the panic()
* function of Unix/Linux kernels.
*
* If the DEVELHELP macro is defined, the system will be halted;
* the system will be rebooted otherwise.
*
* @warning this function NEVER returns!
*
* @param[in] crash_code a unique code for identifying the crash reason
* @param[in] message a human readable reason for the crash
*
* @return this function never returns
* */
NORETURN void core_panic(int crash_code, const char *message);
/** @} */
#endif /* __CRASH_H */
/** @} */

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2013 Freie Universität Berlin
* Copyright (C) 2014 Freie Universität Berlin
*
* This file is subject to the terms and conditions of the GNU Lesser General
* Public License. See the file LICENSE in the top level directory for more
@ -25,6 +25,16 @@
#include <stdio.h>
#include "sched.h"
/**
* @name Print debug information if the calling thread stack is large enough
*
* Use this macro the same as printf. When DEVHELP is defined inside an
* implementation file, all usages of *DEBUG_PRINTF* will print the given
* information to std-out. If DEVHELP is not set, all occurrences of
* *DEBUG_PRINTF* will be ignored.
*
* @{
*/
#if DEVELHELP
#include "cpu-conf.h"
#define DEBUG_PRINT(...) \
@ -39,7 +49,21 @@
#else
#define DEBUG_PRINT(...) printf(__VA_ARGS__)
#endif
/** @} */
/**
* @brief Print debug information to std-out
*
* If *ENABLE_DEBUG* is defined inside an implementation file, all calls to
* *DEBUG* and *DEBUGF* will work the same as *printf* and output the given
* information to stdout. If *ENABLE_DEBUG* is not defined, all calls to
* *DEBUG* and *DEBUGF* will be ignored.
*
* In addition to just printing the given information *DEBUGF* will further
* print extended debug information about the current thread and function.
*
* @{
*/
#if ENABLE_DEBUG
#include "tcb.h"
#define DEBUG(...) DEBUG_PRINT(__VA_ARGS__)
@ -55,6 +79,7 @@
#define DEBUG(...)
#define DEBUGF(...)
#endif
/** @} */
#endif /* __DEBUG_H */
/** @} */

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2013 Freie Universität Berlin
* Copyright (C) 2014 Freie Universität Berlin
*
* This file is subject to the terms and conditions of the GNU Lesser General
* Public License. See the file LICENSE in the top level directory for more
@ -19,10 +19,16 @@
#ifndef _FLAGS_H
#define _FLAGS_H
#define CREATE_SLEEPING (1)
#define AUTO_FREE (2)
#define CREATE_WOUT_YIELD (4)
#define CREATE_STACKTEST (8)
/**
* @name Optional flags for controlling a threads initial state.
* @{
*/
#define CREATE_SLEEPING (1) /**< set the new thread to sleeping */
#define AUTO_FREE (2) /**< currently not implemented */
#define CREATE_WOUT_YIELD (4) /**< do not automatically call thread_yield() after creation */
#define CREATE_STACKTEST (8) /**< write markers into the thread's stack to measure stack
usage (for debugging) */
/** @} */
#endif /* _FLAGS_H */
/** @} */
#endif // _FLAGS_H

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2013 Freie Universität Berlin
* Copyright (C) 2014 Freie Universität Berlin
*
* This file subject to the terms and conditions of the GNU Lesser General
* Public License. See the file LICENSE in the top level directory for more
@ -29,77 +29,122 @@
#define STATUS_NOT_FOUND (-1)
/** Minimum stack size */
/**
* @name Minimum stack size
*/
#ifndef MINIMUM_STACK_SIZE
#define MINIMUM_STACK_SIZE (sizeof(tcb_t))
#endif
/**
* @brief Creates a new thread.
* @brief Creates a new thread
*
* @param stack Lowest address of preallocated stack space
* @param stacksize
* @param flags Options:
* YIELD: force context switch.
* CREATE_SLEEPING: set new thread to sleeping state, thread must be woken up manually.
* CREATE_STACKTEST: initialize stack with values needed for stack overflow testing.
* Creating a new thread is done in two steps:
* 1. the new thread's stack is initialized depending on the platform
* 2. the new thread is added to the scheduler to be run
*
* @param priority Priority of newly created thread. Lower number means higher
* priority. 0 means highest possible priority. Lowest priority is
* PRIORITY_IDLE-1, usually 30.
* As RIOT is using a fixed priority scheduling algorithm, threads
* are scheduled base on their priority. The priority is fixed for every thread
* and specified during the threads creation by the *priority* parameter.
*
* @return returns <0 on error, pid of newly created task else.
* A low value for *priority* number means the thread having a high priority
* with 0 being the highest possible priority.
*
* The lowest possible priority is *PRIORITY_IDLE - 1*. The value is depending
* on the platforms architecture, e.g. 30 in 32-bit systems, 14 in 16-bit systems.
*
*
* In addition to the priority, the *flags* argument can be used to alter the
* newly created threads behavior after creation. The following flags are available:
* - CREATE_SLEEPING the newly created thread will be put to sleeping state and
* must be waken up manually
* - CREATE_WOUT_YIELD the newly created thread will not run immediately after creation
* - CREATE_STACKTEST write markers into the thread's stack to measure the stack's memory
* usage (for debugging and profiling purposes)
*
* @param[out] stack start address of the preallocated stack memory
* @param[in] stacksize the size of the thread's stack in bytes
* @param[in] priority priority of the new thread, lower mean higher priority
* @param[in] flags optional flags for the creation of the new thread
* @param[in] function pointer to the code that is executed in the new thread
* @param[in] name a human readable descriptor for the thread
*
* @return value ``<0`` on error
* @return pid of newly created task, otherwise
*/
int thread_create(char *stack, int stacksize, char priority, int flags, void (*function) (void), const char *name);
int thread_create(char *stack,
int stacksize,
char priority,
int flags,
void (*function) (void),
const char *name);
/**
* @brief returns the status of a process.
* @return STATUS_NOT_FOUND if pid is unknown
* @brief Returns the status of a process
*
* @param[in] pid the PID of the thread to get the status from
*
* @return status of the thread
* @return `STATUS_NOT_FOUND` if pid is unknown
*/
int thread_getstatus(int pid);
/**
* @brief returns the name of a process.
* @return NULL if pid is unknown
* @brief Returns the name of a process
*
* @param[in] pid the PID of the thread to get the name from
*
* @return the threads name
* @return `NULL` if pid is unknown
*/
const char *thread_getname(int pid);
/**
* @brief Puts the current thread into sleep mode. Has to be woken up externally.
* @brief Puts the current thread into sleep mode. Has to be woken up externally.
*/
void thread_sleep(void);
/**
* @brief The current thread yields and let the scheduler run.
* @brief The current thread yields and let the scheduler run
*
* The current thread will resume operation immediately if there is no other thread with the same
* or a higher priority.
*/
void thread_yield(void);
/**
* @brief Wakes up a sleeping thread.
* @param pid The PID of the thread to be woken up
* @return STATUS_NOT_FOUND if pid is unknown or not sleeping
* @brief Wakes up a sleeping thread.
*
* @param[in] pid the PID of the thread to be woken up
*
* @return `1` on success
* @return `STATUS_NOT_FOUND` if pid is unknown or not sleeping
*/
int thread_wakeup(int pid);
/**
* @brief Returns the process ID of the currently running thread.
* @return Obviously you are not a golfer.
* @brief Returns the process ID of the currently running thread
*
* @return obviously you are not a golfer.
*/
int thread_getpid(void);
/**
* @brief Returns the process ID of the thread running before the current one.
* @return Obviously you are not a golfer.
* @brief Returns the process ID of the thread running before the current one
*
* @return obviously you are not a golfer.
*/
int thread_getlastpid(void);
/**
* @brief Measures the stack usage of a stack.
* @brief Measures the stack usage of a stack
*
* Only works if the thread was created with the flag CREATE_STACKTEST.
*
* @param stack The stack you want to measure. try active_thread->stack_start.
* @return The amount of unused space of the thread's stack
* @param[in] stack the stack you want to measure. try `active_thread->stack_start`
*
* @return the amount of unused space of the thread's stack
*/
int thread_measure_stack_free(char *stack);