Browse Source

core: introduce KERNEL_PID_FIRST and KERNEL_PID_LAST

dev/timer
René Kijewski 9 years ago
parent
commit
b31e5a8675
  1. 24
      core/include/kernel_types.h
  2. 3
      core/include/sched.h
  3. 20
      core/thread.c
  4. 4
      sys/ps/ps.c

24
core/include/kernel_types.h

@ -5,19 +5,35 @@
#include <inttypes.h>
/**
* @def KERNEL_PID_UNDEF
* @brief Identifier to detect an invalid PID
* @def MAXTHREADS
* @brief The maximum number of threads to be scheduled
*/
#ifndef MAXTHREADS
#define MAXTHREADS 32
#endif
/**
* Canonical identifier for an invalid PID.
*/
#define KERNEL_PID_UNDEF -1
/**
* The first valid PID (inclusive).
*/
#define KERNEL_PID_FIRST (KERNEL_PID_UNDEF + 1)
/**
* The last valid PID (inclusive).
*/
#define KERNEL_PID_LAST (KERNEL_PID_FIRST + MAXTHREADS - 1)
/**
* Macro for printing formatter
*/
#define PRIkernel_pid PRIi16
/**
* @brief Unique process identifier
*
* Unique process identifier
*/
typedef int16_t kernel_pid_t;

3
core/include/sched.h

@ -84,8 +84,7 @@
#include "bitarithm.h"
#include "tcb.h"
#include "attributes.h"
#define MAXTHREADS 32 /**< the maximum number of threads to be scheduled */
#include "kernel_types.h"
/**
* @def SCHED_PRIO_LEVELS

20
core/thread.c

@ -39,7 +39,7 @@ inline kernel_pid_t thread_getpid(void)
volatile tcb_t *thread_get(kernel_pid_t pid)
{
if ((pid != KERNEL_PID_UNDEF) && (0 <= pid) && (pid < MAXTHREADS)) {
if ((pid != KERNEL_PID_UNDEF) && (KERNEL_PID_FIRST <= pid) && (pid <= KERNEL_PID_LAST)) {
return sched_threads[pid];
}
return NULL;
@ -158,19 +158,14 @@ kernel_pid_t thread_create(char *stack, int stacksize, char priority, int flags,
dINT();
}
kernel_pid_t pid = 0;
while (pid < MAXTHREADS) {
if (sched_threads[pid] == NULL) {
sched_threads[pid] = cb;
cb->pid = pid;
kernel_pid_t pid = KERNEL_PID_UNDEF;
for (kernel_pid_t i = KERNEL_PID_FIRST; i <= KERNEL_PID_LAST; ++i) {
if (sched_threads[i] == NULL) {
pid = i;
break;
}
pid++;
}
if (pid == MAXTHREADS) {
if (pid == KERNEL_PID_UNDEF) {
DEBUG("thread_create(): too many threads!\n");
if (!inISR()) {
@ -180,6 +175,9 @@ kernel_pid_t thread_create(char *stack, int stacksize, char priority, int flags,
return -EOVERFLOW;
}
sched_threads[pid] = cb;
cb->pid = pid;
cb->sp = thread_stack_init(function, arg, stack, stacksize);
cb->stack_start = stack;

4
sys/ps/ps.c

@ -21,6 +21,7 @@
#include "hwtimer.h"
#include "sched.h"
#include "tcb.h"
#include "kernel_types.h"
/* list of states copied from tcb.h */
const char *state_names[] = {
@ -40,7 +41,6 @@ const char *state_names[] = {
void thread_print_all(void)
{
const char queued_name[] = {'_', 'Q'};
int i;
#ifdef DEVELHELP
int overall_stacksz = 0, overall_used = 0;
#endif
@ -56,7 +56,7 @@ void thread_print_all(void)
"\n"
, "name", "state");
for (i = 0; i < MAXTHREADS; i++) {
for (kernel_pid_t i = KERNEL_PID_FIRST; i <= KERNEL_PID_LAST; i++) {
tcb_t *p = (tcb_t *)sched_threads[i];
if (p != NULL) {

Loading…
Cancel
Save