summaryrefslogtreecommitdiffstats
path: root/spec/if/rtems/tasks/create-from-config.yml
blob: f592686e8054a5ea4393026cf02e6fe5defd43ae (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
brief: |
  Creates a task from the specified the task configuration.
copyrights:
- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
definition:
  default:
    body: null
    params:
    - const ${config:/name} *${.:/params[0]/name}
    - ${../types/id:/name} *${.:/params[1]/name}
    return: ${../status/code:/name}
  variants: []
description: null
enabled-by: true
interface-type: function
links:
- role: interface-placement
  uid: header
- role: interface-ingroup
  uid: group
name: rtems_task_create_from_config
notes: |
  In contrast to tasks created by ${create:/name}, the tasks created by this
  directive use a user-provided task storage area.  The task storage area
  contains the task stack, the thread-local storage, and the floating-point
  context on architectures with a separate floating-point context.

  It is not recommended to mix ${create:/name} and ${.:/name} in an
  application.  This directive is intended for applications which do not want
  to use the RTEMS Workspace and instead statically allocate all operating
  system resources.  The stack space estimate done by <rtems/confdefs.h>
  assumes that all tasks are created by ${create:/name}.  The estimate can be
  adjusted to take user-provided task storage areas into account through the
  ${../../acfg/tasks-created-from-config:/name} application configuration
  option or a custom task stack allocator, see
  ${../../acfg/task-stack-allocator:/name}.
params:
- description: is the task configuration.
  dir: null
  name: config
- description: |
    is the pointer to an object identifier variable.  The identifier of the
    created task object will be stored in this variable, in case of a
    successful operation.
  dir: out
  name: id
return:
  return: null
  return-values:
  - description: |
      The requested operation was successful.
    value: ${../status/successful:/name}
  - description: |
      The ${.:/params[1]/name} parameter was ${/if/c/null:/name}.
    value: ${../status/invalid-address:/name}
  - description: |
      The task name was invalid.
    value: ${../status/invalid-name:/name}
  - description: |
      The initial task priority was invalid.
    value: ${../status/invalid-priority:/name}
  - description: |
      The thread-local storage size is greater than the maximum thread-local
      storage size specified in the task configuration.  The thread-local
      storage size is determined by the thread-local variables used by the
      application and ${../../acfg/max-thread-local-storage-size:/name}.
    value: ${../status/invalid-size:/name}
  - description: |
      The task storage area was too small to provide a task stack of the
      configured minimum size, see ${../../acfg/min-task-stack-size:/name}.
      The task storage area contains the task stack, the thread-local storage,
      and the floating-point context on architectures with a separate
      floating-point context.
    value: ${../status/invalid-size:/name}
  - description: |
      There was no inactive task object available to create a task.
    value: ${../status/too-many:/name}
  - description: |
      In multiprocessing configurations, there was no inactive global object
      available to create a global task.
    value: ${../status/too-many:/name}
  - description: |
      One of the task create extensions failed during the task creation.
    value: ${../status/unsatisfied:/name}
  - description: |
      In SMP configurations, the non-preemption mode was not supported.
    value: ${../status/unsatisfied:/name}
  - description: |
      In SMP configurations, the interrupt level mode was not supported.
    value: ${../status/unsatisfied:/name}
type: interface