mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-09-12 17:17:44 -04:00
Merge branch 'main' into feature/xcore
* main: Add some assertions and coverage exceptions to queue.c (#273) Moved git-secrets check to a different workflow (#271) Comment: fix code comment for xTaskAbortDelay (#272) Added git-secrets check to Github Actions (#270) fixed documentation for ulTaskNotifyTake() and ulTaskNotifyTakeIndexed() (#269) Add description for vTaskList (#206) Support allocating stack from separate heap (#267) Update python version to 3.7.10 (#265) Update URL in history.txt (#259) Remove unmatched braces in MessageBuffer pre tags (#256) Check: improve verbosity of url verifier (#260) Update issue templates incorporate updates from common (#255) Typos (#248) Delete gitattributes (#253) Fix typo in comment in task.h (#244) Fix Github checks after move from master to main (#246)
This commit is contained in:
commit
1f1474e250
16 changed files with 171 additions and 187 deletions
105
.gitattributes
vendored
105
.gitattributes
vendored
|
@ -1,105 +0,0 @@
|
|||
# Line ending normalization
|
||||
* text=auto
|
||||
|
||||
# Documents
|
||||
*.doc diff=astextplain
|
||||
*.DOC diff=astextplain
|
||||
*.docx diff=astextplain
|
||||
*.DOCX diff=astextplain
|
||||
*.dot diff=astextplain
|
||||
*.DOT diff=astextplain
|
||||
*.pdf diff=astextplain
|
||||
*.PDF diff=astextplain
|
||||
*.rtf diff=astextplain
|
||||
*.RTF diff=astextplain
|
||||
*.md text
|
||||
*.adoc text
|
||||
*.textile text
|
||||
*.mustache text
|
||||
*.csv text
|
||||
*.tab text
|
||||
*.tsv text
|
||||
*.sql text
|
||||
*.html text
|
||||
*.css text
|
||||
|
||||
# Graphics
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
*.jpeg binary
|
||||
*.gif binary
|
||||
*.tif binary
|
||||
*.tiff binary
|
||||
*.ico binary
|
||||
*.svg binary
|
||||
*.eps binary
|
||||
|
||||
#sources
|
||||
*.c text
|
||||
*.cc text
|
||||
*.cxx text
|
||||
*.cpp text
|
||||
*.c++ text
|
||||
*.hpp text
|
||||
*.h text
|
||||
*.h++ text
|
||||
*.hh text
|
||||
*.s text
|
||||
*.S text
|
||||
*.asm text
|
||||
|
||||
# Compiled Object files
|
||||
*.slo binary
|
||||
*.lo binary
|
||||
*.o binary
|
||||
*.obj binary
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch binary
|
||||
*.pch binary
|
||||
|
||||
# Compiled Dynamic libraries
|
||||
*.so binary
|
||||
*.dylib binary
|
||||
*.dll binary
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai binary
|
||||
*.la binary
|
||||
*.a binary
|
||||
*.lib binary
|
||||
|
||||
# Executables
|
||||
*.exe binary
|
||||
*.out binary
|
||||
*.app binary
|
||||
|
||||
|
||||
# Basic .gitattributes for a python repo.
|
||||
|
||||
# Source files
|
||||
# ============
|
||||
*.pxd text
|
||||
*.py text
|
||||
*.py3 text
|
||||
*.pyw text
|
||||
*.pyx text
|
||||
|
||||
# Binary files
|
||||
# ============
|
||||
*.db binary
|
||||
*.p binary
|
||||
*.pkl binary
|
||||
*.pyc binary
|
||||
*.pyd binary
|
||||
*.pyo binary
|
||||
|
||||
# Note: .db, .p, and .pkl files are associated
|
||||
# with the python modules ``pickle``, ``dbm.*``,
|
||||
# ``shelve``, ``marshal``, ``anydbm``, & ``bsddb``
|
||||
# (among others).
|
||||
|
||||
*.sh text
|
||||
make text
|
||||
makefile text
|
||||
*.mk text
|
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
name: Feature request
|
||||
about: Suggest a new feature for this project
|
||||
title: "[Feature Request] <replace with your title>"
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
8
.github/actions/url_verifier.sh
vendored
8
.github/actions/url_verifier.sh
vendored
|
@ -8,6 +8,7 @@ then
|
|||
exit 2
|
||||
fi
|
||||
|
||||
USER_AGENT="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36"
|
||||
SCRIPT_RET=0
|
||||
|
||||
set -o nounset # Treat unset variables as an error
|
||||
|
@ -27,7 +28,7 @@ function test {
|
|||
|
||||
for UNIQ_URL in ${!dict[@]} # loop urls
|
||||
do
|
||||
CURL_RES=$(curl -I ${UNIQ_URL} 2>/dev/null| head -n 1 | cut -f 2 -d ' ')
|
||||
CURL_RES=$(curl -si --user-agent "$(USER_AGENT)" ${UNIQ_URL} 2>/dev/null| head -n 1 | cut -f 2 -d ' ')
|
||||
RES=$?
|
||||
|
||||
if [ "${CURL_RES}" == '' -o "${CURL_RES}" != '200' ]
|
||||
|
@ -38,11 +39,14 @@ function test {
|
|||
then
|
||||
CURL_RES=$RES
|
||||
SCRIPT_RET=1
|
||||
echo ERROR: Result is: "${CURL_RES}"
|
||||
elif [ "${CURL_RES}" == '403' ]
|
||||
then
|
||||
SCRIPT_RET=1
|
||||
echo ERROR: Result is: "${CURL_RES}"
|
||||
else
|
||||
echo WARNING: Result is: "${CURL_RES}"
|
||||
fi
|
||||
echo Result is: "${CURL_RES}"
|
||||
echo "================================="
|
||||
fi
|
||||
done
|
||||
|
|
5
.github/lexicon.txt
vendored
5
.github/lexicon.txt
vendored
|
@ -1529,6 +1529,7 @@ prvinitialisenewstreambuffer
|
|||
prvinitialisenewtimer
|
||||
prvinsertblockintofreelist
|
||||
prvlockqueue
|
||||
prvnotifyqueuesetcontainer
|
||||
prvportmalloc
|
||||
prvportresetpic
|
||||
prvprocesssimulatedinterrupts
|
||||
|
@ -1617,6 +1618,7 @@ pvowner
|
|||
pvparameter
|
||||
pvparameters
|
||||
pvportmalloc
|
||||
pvportmallocstack
|
||||
pvportrealloc
|
||||
pvreg
|
||||
pvrxdata
|
||||
|
@ -1686,6 +1688,7 @@ pxprevious
|
|||
pxpreviouswaketime
|
||||
pxqueue
|
||||
pxqueuebuffer
|
||||
pxqueuesetcontainer
|
||||
pxramstack
|
||||
pxreadycoroutinelists
|
||||
pxreadytaskslists
|
||||
|
@ -1705,6 +1708,7 @@ pxstreambuffercreatestatic
|
|||
pxtagvalue
|
||||
pxtask
|
||||
pxtaskbuffer
|
||||
pxtaskcode
|
||||
pxtaskdefinition
|
||||
pxtaskstatus
|
||||
pxtaskstatusarray
|
||||
|
@ -3017,6 +3021,7 @@ xtaskswaitingforbits
|
|||
xtaskswaitingtermination
|
||||
xtaskswaitingtoreceive
|
||||
xtaskswaitingtosend
|
||||
xtasktodelete
|
||||
xtasktonotify
|
||||
xtasktoquery
|
||||
xtasktoresume
|
||||
|
|
9
.github/scripts/kernel_checker.py
vendored
9
.github/scripts/kernel_checker.py
vendored
|
@ -30,7 +30,8 @@ KERNEL_IGNORED_EXTENSIONS = [
|
|||
'.tex',
|
||||
'.png',
|
||||
'.bat',
|
||||
'.sh'
|
||||
'.sh',
|
||||
'.txt'
|
||||
]
|
||||
|
||||
KERNEL_IGNORED_PATTERNS = [
|
||||
|
@ -83,7 +84,11 @@ def main():
|
|||
checker.ignoreFile(*KERNEL_IGNORED_FILES)
|
||||
checker.ignoreFile(os.path.split(__file__)[-1])
|
||||
|
||||
return checker.processArgs(args)
|
||||
rc = checker.processArgs(args)
|
||||
if rc:
|
||||
checker.showHelp(__file__)
|
||||
|
||||
return rc
|
||||
|
||||
if __name__ == '__main__':
|
||||
exit(main())
|
||||
|
|
2
.github/workflows/auto-release.yml
vendored
2
.github/workflows/auto-release.yml
vendored
|
@ -21,7 +21,7 @@ jobs:
|
|||
- name: Tool Setup
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: 3.8.5
|
||||
python-version: 3.7.10
|
||||
architecture: x64
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
|
3
.github/workflows/ci.yml
vendored
3
.github/workflows/ci.yml
vendored
|
@ -3,7 +3,7 @@ on:
|
|||
push:
|
||||
branches: ["**"]
|
||||
pull_request:
|
||||
branches: [master]
|
||||
branches: [main]
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
spell-check:
|
||||
|
@ -44,3 +44,4 @@ jobs:
|
|||
- name: URL Checker
|
||||
run: |
|
||||
bash kernel/.github/actions/url_verifier.sh kernel
|
||||
|
||||
|
|
24
.github/workflows/git-secrets.yml
vendored
Normal file
24
.github/workflows/git-secrets.yml
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
name: git-secrets Check
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
git-secrets:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Checkout awslabs/git-secrets
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: awslabs/git-secrets
|
||||
ref: master
|
||||
path: git-secrets
|
||||
- name: Install git-secrets
|
||||
run: cd git-secrets && sudo make install && cd ..
|
||||
- name: Run git-secrets
|
||||
run: |
|
||||
git-secrets --register-aws
|
||||
git-secrets --scan
|
6
.github/workflows/kernel-checks.yml
vendored
6
.github/workflows/kernel-checks.yml
vendored
|
@ -11,7 +11,7 @@ jobs:
|
|||
- name: Tool Setup
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: 3.8.5
|
||||
python-version: 3.7.10
|
||||
architecture: x64
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
@ -36,12 +36,12 @@ jobs:
|
|||
uses: lots0logs/gh-action-get-changed-files@2.1.4
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
|
||||
# Run checks
|
||||
- name: Check File Headers
|
||||
run: |
|
||||
mv tools/.github/scripts/common inspect/.github/scripts
|
||||
pip install -r inspect/.github/scripts/common/requirements.txt
|
||||
cd inspect
|
||||
.github/scripts/kernel_checker.py --json ${HOME}/files_modified.json ${HOME}/files_added.json ${HOME}/files_renamed.json
|
||||
exit $?
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@ Changes between FreeRTOS V10.3.1 and FreeRTOS V10.4.0 released September 10 2020
|
|||
the same way the Windows port layer enables FreeRTOS to run on Windows
|
||||
hosts.
|
||||
+ Many other minor optimisations and enhancements. For full details
|
||||
see https://github.com/FreeRTOS/FreeRTOS-Kernel/commits/master
|
||||
see https://github.com/FreeRTOS/FreeRTOS-Kernel/commits/main
|
||||
|
||||
|
||||
Changes between FreeRTOS V10.3.0 and FreeRTOS V10.3.1 released February 18 2020
|
||||
|
|
|
@ -900,6 +900,11 @@
|
|||
#define configSUPPORT_DYNAMIC_ALLOCATION 1
|
||||
#endif
|
||||
|
||||
#ifndef configSTACK_ALLOCATION_FROM_SEPARATE_HEAP
|
||||
/* Defaults to 0 for backward compatibility. */
|
||||
#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0
|
||||
#endif
|
||||
|
||||
#ifndef configSTACK_DEPTH_TYPE
|
||||
|
||||
/* Defaults to uint16_t for backward compatibility, but can be overridden
|
||||
|
@ -983,7 +988,7 @@
|
|||
|
||||
#ifndef configMIN
|
||||
|
||||
/* The application writer has not provided their own MAX macro, so define
|
||||
/* The application writer has not provided their own MIN macro, so define
|
||||
* the following generic implementation. */
|
||||
#define configMIN( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) )
|
||||
#endif
|
||||
|
@ -1109,7 +1114,7 @@
|
|||
* data hiding policy, so the real structures used by FreeRTOS to maintain the
|
||||
* state of tasks, queues, semaphores, etc. are not accessible to the application
|
||||
* code. However, if the application writer wants to statically allocate such
|
||||
* an object then the size of the object needs to be know. Dummy structures
|
||||
* an object then the size of the object needs to be known. Dummy structures
|
||||
* that are guaranteed to have the same size and alignment requirements of the
|
||||
* real objects are used for this purpose. The dummy list and list item
|
||||
* structures below are used for inclusion in such a dummy structure.
|
||||
|
@ -1158,7 +1163,7 @@ typedef struct xSTATIC_LIST
|
|||
* strict data hiding policy. This means the Task structure used internally by
|
||||
* FreeRTOS is not accessible to application code. However, if the application
|
||||
* writer wants to statically allocate the memory required to create a task then
|
||||
* the size of the task object needs to be know. The StaticTask_t structure
|
||||
* the size of the task object needs to be known. The StaticTask_t structure
|
||||
* below is provided for this purpose. Its sizes and alignment requirements are
|
||||
* guaranteed to match those of the genuine structure, no matter which
|
||||
* architecture is being used, and no matter how the values in FreeRTOSConfig.h
|
||||
|
@ -1221,7 +1226,7 @@ typedef struct xSTATIC_TCB
|
|||
* strict data hiding policy. This means the Queue structure used internally by
|
||||
* FreeRTOS is not accessible to application code. However, if the application
|
||||
* writer wants to statically allocate the memory required to create a queue
|
||||
* then the size of the queue object needs to be know. The StaticQueue_t
|
||||
* then the size of the queue object needs to be known. The StaticQueue_t
|
||||
* structure below is provided for this purpose. Its sizes and alignment
|
||||
* requirements are guaranteed to match those of the genuine structure, no
|
||||
* matter which architecture is being used, and no matter how the values in
|
||||
|
@ -1292,7 +1297,7 @@ typedef struct xSTATIC_EVENT_GROUP
|
|||
* strict data hiding policy. This means the software timer structure used
|
||||
* internally by FreeRTOS is not accessible to application code. However, if
|
||||
* the application writer wants to statically allocate the memory required to
|
||||
* create a software timer then the size of the queue object needs to be know.
|
||||
* create a software timer then the size of the queue object needs to be known.
|
||||
* The StaticTimer_t structure below is provided for this purpose. Its sizes
|
||||
* and alignment requirements are guaranteed to match those of the genuine
|
||||
* structure, no matter which architecture is being used, and no matter how the
|
||||
|
@ -1320,12 +1325,12 @@ typedef struct xSTATIC_TIMER
|
|||
* internally by FreeRTOS is not accessible to application code. However, if
|
||||
* the application writer wants to statically allocate the memory required to
|
||||
* create a stream buffer then the size of the stream buffer object needs to be
|
||||
* know. The StaticStreamBuffer_t structure below is provided for this purpose.
|
||||
* Its size and alignment requirements are guaranteed to match those of the
|
||||
* genuine structure, no matter which architecture is being used, and no matter
|
||||
* how the values in FreeRTOSConfig.h are set. Its contents are somewhat
|
||||
* obfuscated in the hope users will recognise that it would be unwise to make
|
||||
* direct use of the structure members.
|
||||
* known. The StaticStreamBuffer_t structure below is provided for this
|
||||
* purpose. Its size and alignment requirements are guaranteed to match those
|
||||
* of the genuine structure, no matter which architecture is being used, and
|
||||
* no matter how the values in FreeRTOSConfig.h are set. Its contents are
|
||||
* somewhat obfuscated in the hope users will recognise that it would be unwise
|
||||
* to make direct use of the structure members.
|
||||
*/
|
||||
typedef struct xSTATIC_STREAM_BUFFER
|
||||
{
|
||||
|
|
|
@ -630,7 +630,7 @@ typedef void * MessageBufferHandle_t;
|
|||
/**
|
||||
* message_buffer.h
|
||||
* <pre>
|
||||
* BaseType_t xMessageBufferIsFull( MessageBufferHandle_t xMessageBuffer ) );
|
||||
* BaseType_t xMessageBufferIsFull( MessageBufferHandle_t xMessageBuffer );
|
||||
* </pre>
|
||||
*
|
||||
* Tests to see if a message buffer is full. A message buffer is full if it
|
||||
|
@ -648,7 +648,7 @@ typedef void * MessageBufferHandle_t;
|
|||
/**
|
||||
* message_buffer.h
|
||||
* <pre>
|
||||
* BaseType_t xMessageBufferIsEmpty( MessageBufferHandle_t xMessageBuffer ) );
|
||||
* BaseType_t xMessageBufferIsEmpty( MessageBufferHandle_t xMessageBuffer );
|
||||
* </pre>
|
||||
*
|
||||
* Tests to see if a message buffer is empty (does not contain any messages).
|
||||
|
@ -690,7 +690,7 @@ typedef void * MessageBufferHandle_t;
|
|||
/**
|
||||
* message_buffer.h
|
||||
* <pre>
|
||||
* size_t xMessageBufferSpaceAvailable( MessageBufferHandle_t xMessageBuffer ) );
|
||||
* size_t xMessageBufferSpaceAvailable( MessageBufferHandle_t xMessageBuffer );
|
||||
* </pre>
|
||||
* Returns the number of bytes of free space in the message buffer.
|
||||
*
|
||||
|
@ -714,7 +714,7 @@ typedef void * MessageBufferHandle_t;
|
|||
/**
|
||||
* message_buffer.h
|
||||
* <pre>
|
||||
* size_t xMessageBufferNextLengthBytes( MessageBufferHandle_t xMessageBuffer ) );
|
||||
* size_t xMessageBufferNextLengthBytes( MessageBufferHandle_t xMessageBuffer );
|
||||
* </pre>
|
||||
* Returns the length (in bytes) of the next message in a message buffer.
|
||||
* Useful if xMessageBufferReceive() returned 0 because the size of the buffer
|
||||
|
|
|
@ -179,6 +179,14 @@ void vPortInitialiseBlocks( void ) PRIVILEGED_FUNCTION;
|
|||
size_t xPortGetFreeHeapSize( void ) PRIVILEGED_FUNCTION;
|
||||
size_t xPortGetMinimumEverFreeHeapSize( void ) PRIVILEGED_FUNCTION;
|
||||
|
||||
#if( configSTACK_ALLOCATION_FROM_SEPARATE_HEAP == 1 )
|
||||
void *pvPortMallocStack( size_t xSize ) PRIVILEGED_FUNCTION;
|
||||
void vPortFreeStack( void *pv ) PRIVILEGED_FUNCTION;
|
||||
#else
|
||||
#define pvPortMallocStack pvPortMalloc
|
||||
#define vPortFreeStack vPortFree
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Setup the hardware ready for the scheduler to take control. This generally
|
||||
* sets up a tick interrupt and sets timers for the correct tick frequency.
|
||||
|
|
|
@ -87,7 +87,7 @@ typedef BaseType_t (* TaskHookFunction_t)( void * );
|
|||
typedef enum
|
||||
{
|
||||
eRunning = 0, /* A task is querying the state of itself, so must be running. */
|
||||
eReady, /* The task being queried is in a read or pending ready list. */
|
||||
eReady, /* The task being queried is in a ready or pending ready list. */
|
||||
eBlocked, /* The task being queried is in the Blocked state. */
|
||||
eSuspended, /* The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */
|
||||
eDeleted, /* The task being queried has been deleted, but its TCB has not yet been freed. */
|
||||
|
@ -158,7 +158,7 @@ typedef struct xTASK_STATUS
|
|||
/* Possible return values for eTaskConfirmSleepModeStatus(). */
|
||||
typedef enum
|
||||
{
|
||||
eAbortSleep = 0, /* A task has been made ready or a context switch pended since portSUPPORESS_TICKS_AND_SLEEP() was called - abort entering a sleep mode. */
|
||||
eAbortSleep = 0, /* A task has been made ready or a context switch pended since portSUPPRESS_TICKS_AND_SLEEP() was called - abort entering a sleep mode. */
|
||||
eStandardSleep, /* Enter a sleep mode that will not last any longer than the expected idle time. */
|
||||
eNoTasksWaitingTimeout /* No tasks are waiting for a timeout so it is safe to enter a sleep mode that can only be exited by an external interrupt. */
|
||||
} eSleepModeStatus;
|
||||
|
@ -246,12 +246,12 @@ typedef enum
|
|||
* task. h
|
||||
* <pre>
|
||||
* BaseType_t xTaskCreate(
|
||||
* TaskFunction_t pvTaskCode,
|
||||
* const char * const pcName,
|
||||
* TaskFunction_t pxTaskCode,
|
||||
* const char *pcName,
|
||||
* configSTACK_DEPTH_TYPE usStackDepth,
|
||||
* void *pvParameters,
|
||||
* UBaseType_t uxPriority,
|
||||
* TaskHandle_t *pvCreatedTask
|
||||
* TaskHandle_t *pxCreatedTask
|
||||
* );
|
||||
* </pre>
|
||||
*
|
||||
|
@ -275,7 +275,7 @@ typedef enum
|
|||
* support can alternatively create an MPU constrained task using
|
||||
* xTaskCreateRestricted().
|
||||
*
|
||||
* @param pvTaskCode Pointer to the task entry function. Tasks
|
||||
* @param pxTaskCode Pointer to the task entry function. Tasks
|
||||
* must be implemented to never return (i.e. continuous loop).
|
||||
*
|
||||
* @param pcName A descriptive name for the task. This is mainly used to
|
||||
|
@ -296,7 +296,7 @@ typedef enum
|
|||
* example, to create a privileged task at priority 2 the uxPriority parameter
|
||||
* should be set to ( 2 | portPRIVILEGE_BIT ).
|
||||
*
|
||||
* @param pvCreatedTask Used to pass back a handle by which the created task
|
||||
* @param pxCreatedTask Used to pass back a handle by which the created task
|
||||
* can be referenced.
|
||||
*
|
||||
* @return pdPASS if the task was successfully created and added to a ready
|
||||
|
@ -348,12 +348,12 @@ typedef enum
|
|||
/**
|
||||
* task. h
|
||||
* <pre>
|
||||
* TaskHandle_t xTaskCreateStatic( TaskFunction_t pvTaskCode,
|
||||
* const char * const pcName,
|
||||
* TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,
|
||||
* const char *pcName,
|
||||
* uint32_t ulStackDepth,
|
||||
* void *pvParameters,
|
||||
* UBaseType_t uxPriority,
|
||||
* StackType_t *pxStackBuffer,
|
||||
* StackType_t *puxStackBuffer,
|
||||
* StaticTask_t *pxTaskBuffer );
|
||||
* </pre>
|
||||
*
|
||||
|
@ -369,7 +369,7 @@ typedef enum
|
|||
* memory. xTaskCreateStatic() therefore allows a task to be created without
|
||||
* using any dynamic memory allocation.
|
||||
*
|
||||
* @param pvTaskCode Pointer to the task entry function. Tasks
|
||||
* @param pxTaskCode Pointer to the task entry function. Tasks
|
||||
* must be implemented to never return (i.e. continuous loop).
|
||||
*
|
||||
* @param pcName A descriptive name for the task. This is mainly used to
|
||||
|
@ -386,7 +386,7 @@ typedef enum
|
|||
*
|
||||
* @param uxPriority The priority at which the task will run.
|
||||
*
|
||||
* @param pxStackBuffer Must point to a StackType_t array that has at least
|
||||
* @param puxStackBuffer Must point to a StackType_t array that has at least
|
||||
* ulStackDepth indexes - the array will then be used as the task's stack,
|
||||
* removing the need for the stack to be allocated dynamically.
|
||||
*
|
||||
|
@ -394,15 +394,15 @@ typedef enum
|
|||
* then be used to hold the task's data structures, removing the need for the
|
||||
* memory to be allocated dynamically.
|
||||
*
|
||||
* @return If neither pxStackBuffer or pxTaskBuffer are NULL, then the task will
|
||||
* be created and a handle to the created task is returned. If either
|
||||
* pxStackBuffer or pxTaskBuffer are NULL then the task will not be created and
|
||||
* @return If neither puxStackBuffer nor pxTaskBuffer are NULL, then the task
|
||||
* will be created and a handle to the created task is returned. If either
|
||||
* puxStackBuffer or pxTaskBuffer are NULL then the task will not be created and
|
||||
* NULL is returned.
|
||||
*
|
||||
* Example usage:
|
||||
* <pre>
|
||||
*
|
||||
* // Dimensions the buffer that the task being created will use as its stack.
|
||||
* // Dimensions of the buffer that the task being created will use as its stack.
|
||||
* // NOTE: This is the number of words the stack will hold, not the number of
|
||||
* // bytes. For example, if each stack item is 32-bits, and this is set to 100,
|
||||
* // then 400 bytes (100 * 32-bits) will be allocated.
|
||||
|
@ -643,7 +643,7 @@ typedef enum
|
|||
*
|
||||
* @param xTask The handle of the task being updated.
|
||||
*
|
||||
* @param xRegions A pointer to an MemoryRegion_t structure that contains the
|
||||
* @param xRegions A pointer to a MemoryRegion_t structure that contains the
|
||||
* new memory region definitions.
|
||||
*
|
||||
* Example usage:
|
||||
|
@ -684,7 +684,7 @@ void vTaskAllocateMPURegions( TaskHandle_t xTask,
|
|||
/**
|
||||
* task. h
|
||||
* <pre>
|
||||
* void vTaskDelete( TaskHandle_t xTask );
|
||||
* void vTaskDelete( TaskHandle_t xTaskToDelete );
|
||||
* </pre>
|
||||
*
|
||||
* INCLUDE_vTaskDelete must be defined as 1 for this function to be available.
|
||||
|
@ -703,7 +703,7 @@ void vTaskAllocateMPURegions( TaskHandle_t xTask,
|
|||
* See the demo application file death.c for sample code that utilises
|
||||
* vTaskDelete ().
|
||||
*
|
||||
* @param xTask The handle of the task to be deleted. Passing NULL will
|
||||
* @param xTaskToDelete The handle of the task to be deleted. Passing NULL will
|
||||
* cause the calling task to be deleted.
|
||||
*
|
||||
* Example usage:
|
||||
|
@ -1638,7 +1638,7 @@ configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) PRIVIL
|
|||
* configSUPPORT_STATIC_ALLOCATION is set. For more information see this URI: https://www.FreeRTOS.org/a00110.html#configSUPPORT_STATIC_ALLOCATION
|
||||
*
|
||||
* @param ppxIdleTaskTCBBuffer A handle to a statically allocated TCB buffer
|
||||
* @param ppxIdleTaskStackBuffer A handle to a statically allocated Stack buffer for thie idle task
|
||||
* @param ppxIdleTaskStackBuffer A handle to a statically allocated Stack buffer for the idle task
|
||||
* @param pulIdleTaskStackSize A pointer to the number of elements that will fit in the allocated stack buffer
|
||||
*/
|
||||
void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,
|
||||
|
@ -1795,8 +1795,10 @@ UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray,
|
|||
* demo applications. Do not consider it to be part of the scheduler.
|
||||
*
|
||||
* vTaskList() calls uxTaskGetSystemState(), then formats part of the
|
||||
* uxTaskGetSystemState() output into a human readable table that displays task
|
||||
* names, states and stack usage.
|
||||
* uxTaskGetSystemState() output into a human readable table that displays task:
|
||||
* names, states, priority, stack usage and task number.
|
||||
* Stack usage specified as the number of unused StackType_t words stack can hold
|
||||
* on top of stack - not the number of bytes.
|
||||
*
|
||||
* vTaskList() has a dependency on the sprintf() C library function that might
|
||||
* bloat the code size, use a lot of stack, and provide different results on
|
||||
|
@ -1932,9 +1934,8 @@ uint32_t ulTaskGetIdleRunTimeCounter( void ) PRIVILEGED_FUNCTION;
|
|||
* that way task notifications can be used to send data to a task, or be used as
|
||||
* light weight and fast binary or counting semaphores.
|
||||
*
|
||||
* A task can use xTaskNotifyWaitIndexed() to [optionally] block to wait for a
|
||||
* notification to be pending, or ulTaskNotifyTakeIndexed() to [optionally] block
|
||||
* to wait for a notification value to have a non-zero value. The task does
|
||||
* A task can use xTaskNotifyWaitIndexed() or ulTaskNotifyTakeIndexed() to
|
||||
* [optionally] block to wait for a notification to be pending. The task does
|
||||
* not consume any CPU time while it is in the Blocked state.
|
||||
*
|
||||
* A notification sent to a task will remain pending until it is cleared by the
|
||||
|
@ -1976,7 +1977,7 @@ uint32_t ulTaskGetIdleRunTimeCounter( void ) PRIVILEGED_FUNCTION;
|
|||
*
|
||||
* eSetBits -
|
||||
* The target notification value is bitwise ORed with ulValue.
|
||||
* xTaskNofifyIndexed() always returns pdPASS in this case.
|
||||
* xTaskNotifyIndexed() always returns pdPASS in this case.
|
||||
*
|
||||
* eIncrement -
|
||||
* The target notification value is incremented. ulValue is not used and
|
||||
|
@ -2119,7 +2120,7 @@ BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify,
|
|||
* value, if at all. Valid values for eAction are as follows:
|
||||
*
|
||||
* eSetBits -
|
||||
* The task's notification value is bitwise ORed with ulValue. xTaskNofify()
|
||||
* The task's notification value is bitwise ORed with ulValue. xTaskNotify()
|
||||
* always returns pdPASS in this case.
|
||||
*
|
||||
* eIncrement -
|
||||
|
@ -2289,7 +2290,7 @@ BaseType_t xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify,
|
|||
* the Blocked state for a notification to be received, should a notification
|
||||
* not already be pending when xTaskNotifyWait() was called. The task
|
||||
* will not consume any processing time while it is in the Blocked state. This
|
||||
* is specified in kernel ticks, the macro pdMS_TO_TICSK( value_in_ms ) can be
|
||||
* is specified in kernel ticks, the macro pdMS_TO_TICKS( value_in_ms ) can be
|
||||
* used to convert a time specified in milliseconds to a time specified in
|
||||
* ticks.
|
||||
*
|
||||
|
@ -2520,8 +2521,8 @@ void vTaskGenericNotifyGiveFromISR( TaskHandle_t xTaskToNotify,
|
|||
* value acts like a counting semaphore.
|
||||
*
|
||||
* A task can use ulTaskNotifyTakeIndexed() to [optionally] block to wait for
|
||||
* the task's notification value to be non-zero. The task does not consume any
|
||||
* CPU time while it is in the Blocked state.
|
||||
* a notification. The task does not consume any CPU time while it is in the
|
||||
* Blocked state.
|
||||
*
|
||||
* Where as xTaskNotifyWaitIndexed() will return when a notification is pending,
|
||||
* ulTaskNotifyTakeIndexed() will return when the task's notification value is
|
||||
|
@ -2559,7 +2560,7 @@ void vTaskGenericNotifyGiveFromISR( TaskHandle_t xTaskToNotify,
|
|||
* should the count not already be greater than zero when
|
||||
* ulTaskNotifyTake() was called. The task will not consume any processing
|
||||
* time while it is in the Blocked state. This is specified in kernel ticks,
|
||||
* the macro pdMS_TO_TICSK( value_in_ms ) can be used to convert a time
|
||||
* the macro pdMS_TO_TICKS( value_in_ms ) can be used to convert a time
|
||||
* specified in milliseconds to a time specified in ticks.
|
||||
*
|
||||
* @return The task's notification count before it is either cleared to zero or
|
||||
|
@ -2738,7 +2739,7 @@ void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) PRIVILEGED_FUNCTION;
|
|||
* @param pxTicksToWait The number of ticks to check for timeout i.e. if
|
||||
* pxTicksToWait ticks have passed since pxTimeOut was last updated (either by
|
||||
* vTaskSetTimeOutState() or xTaskCheckForTimeOut()), the timeout has occurred.
|
||||
* If the timeout has not occurred, pxTIcksToWait is updated to reflect the
|
||||
* If the timeout has not occurred, pxTicksToWait is updated to reflect the
|
||||
* number of remaining ticks.
|
||||
*
|
||||
* @return If timeout has occurred, pdTRUE is returned. Otherwise pdFALSE is
|
||||
|
@ -2875,7 +2876,7 @@ BaseType_t xTaskIncrementTick( void ) PRIVILEGED_FUNCTION;
|
|||
* xItemValue value, and inserts the list item at the end of the list.
|
||||
*
|
||||
* The 'ordered' version uses the existing event list item value (which is the
|
||||
* owning tasks priority) to insert the list item into the event list is task
|
||||
* owning task's priority) to insert the list item into the event list in task
|
||||
* priority order.
|
||||
*
|
||||
* @param pxEventList The list containing tasks that are blocked waiting
|
||||
|
@ -2885,7 +2886,7 @@ BaseType_t xTaskIncrementTick( void ) PRIVILEGED_FUNCTION;
|
|||
* event list is not ordered by task priority.
|
||||
*
|
||||
* @param xTicksToWait The maximum amount of time that the task should wait
|
||||
* for the event to occur. This is specified in kernel ticks,the constant
|
||||
* for the event to occur. This is specified in kernel ticks, the constant
|
||||
* portTICK_PERIOD_MS can be used to convert kernel ticks into a real time
|
||||
* period.
|
||||
*/
|
||||
|
|
30
queue.c
30
queue.c
|
@ -342,8 +342,10 @@ BaseType_t xQueueGenericReset( QueueHandle_t xQueue,
|
|||
* variable of type StaticQueue_t or StaticSemaphore_t equals the size of
|
||||
* the real queue and semaphore structures. */
|
||||
volatile size_t xSize = sizeof( StaticQueue_t );
|
||||
configASSERT( xSize == sizeof( Queue_t ) );
|
||||
( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */
|
||||
|
||||
/* This assertion cannot be branch covered in unit tests */
|
||||
configASSERT( xSize == sizeof( Queue_t ) ); /* LCOV_EXCL_BR_LINE */
|
||||
( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */
|
||||
}
|
||||
#endif /* configASSERT_DEFINED */
|
||||
|
||||
|
@ -398,7 +400,7 @@ BaseType_t xQueueGenericReset( QueueHandle_t xQueue,
|
|||
configASSERT( ( uxItemSize == 0 ) || ( uxQueueLength == ( xQueueSizeInBytes / uxItemSize ) ) );
|
||||
|
||||
/* Check for addition overflow. */
|
||||
configASSERT( ( sizeof( Queue_t ) + xQueueSizeInBytes ) > xQueueSizeInBytes );
|
||||
configASSERT( ( sizeof( Queue_t ) + xQueueSizeInBytes ) > xQueueSizeInBytes );
|
||||
|
||||
/* Allocate the queue and storage area. Justification for MISRA
|
||||
* deviation as follows: pvPortMalloc() always ensures returned memory
|
||||
|
@ -561,6 +563,8 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength,
|
|||
TaskHandle_t pxReturn;
|
||||
Queue_t * const pxSemaphore = ( Queue_t * ) xSemaphore;
|
||||
|
||||
configASSERT( xSemaphore );
|
||||
|
||||
/* This function is called by xSemaphoreGetMutexHolder(), and should not
|
||||
* be called directly. Note: This is a good way of determining if the
|
||||
* calling task is the mutex holder, but not a good way of determining the
|
||||
|
@ -944,15 +948,15 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue,
|
|||
vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToSend ), xTicksToWait );
|
||||
|
||||
/* Unlocking the queue means queue events can effect the
|
||||
* event list. It is possible that interrupts occurring now
|
||||
* event list. It is possible that interrupts occurring now
|
||||
* remove this task from the event list again - but as the
|
||||
* scheduler is suspended the task will go onto the pending
|
||||
* ready last instead of the actual ready list. */
|
||||
* ready list instead of the actual ready list. */
|
||||
prvUnlockQueue( pxQueue );
|
||||
|
||||
/* Resuming the scheduler will move tasks from the pending
|
||||
* ready list into the ready list - so it is feasible that this
|
||||
* task is already in a ready list before it yields - in which
|
||||
* task is already in the ready list before it yields - in which
|
||||
* case the yield will not cause a context switch unless there
|
||||
* is also a higher priority task in the pending ready list. */
|
||||
if( xTaskResumeAll() == pdFALSE )
|
||||
|
@ -1774,7 +1778,7 @@ BaseType_t xQueuePeek( QueueHandle_t xQueue,
|
|||
taskEXIT_CRITICAL();
|
||||
|
||||
/* Interrupts and other tasks can send to and receive from the queue
|
||||
* now the critical section has been exited. */
|
||||
* now that the critical section has been exited. */
|
||||
|
||||
vTaskSuspendAll();
|
||||
prvLockQueue( pxQueue );
|
||||
|
@ -2723,6 +2727,9 @@ BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue )
|
|||
{
|
||||
UBaseType_t ux;
|
||||
|
||||
configASSERT( xQueue );
|
||||
configASSERT( pcQueueName );
|
||||
|
||||
/* See if there is an empty space in the registry. A NULL name denotes
|
||||
* a free slot. */
|
||||
for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )
|
||||
|
@ -2753,6 +2760,8 @@ BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue )
|
|||
UBaseType_t ux;
|
||||
const char * pcReturn = NULL; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||
|
||||
configASSERT( xQueue );
|
||||
|
||||
/* Note there is nothing here to protect against another task adding or
|
||||
* removing entries from the registry while it is being searched. */
|
||||
|
||||
|
@ -2781,6 +2790,8 @@ BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue )
|
|||
{
|
||||
UBaseType_t ux;
|
||||
|
||||
configASSERT( xQueue );
|
||||
|
||||
/* See if the handle of the queue being unregistered in actually in the
|
||||
* registry. */
|
||||
for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )
|
||||
|
@ -2967,7 +2978,10 @@ BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue )
|
|||
|
||||
/* This function must be called form a critical section. */
|
||||
|
||||
configASSERT( pxQueueSetContainer );
|
||||
/* The following line is not reachable in unit tests because every call
|
||||
* to prvNotifyQueueSetContainer is preceded by a check that
|
||||
* pxQueueSetContainer != NULL */
|
||||
configASSERT( pxQueueSetContainer ); /* LCOV_EXCL_BR_LINE */
|
||||
configASSERT( pxQueueSetContainer->uxMessagesWaiting < pxQueueSetContainer->uxLength );
|
||||
|
||||
if( pxQueueSetContainer->uxMessagesWaiting < pxQueueSetContainer->uxLength )
|
||||
|
|
32
tasks.c
32
tasks.c
|
@ -76,7 +76,7 @@
|
|||
*/
|
||||
#define tskSTACK_FILL_BYTE ( 0xa5U )
|
||||
|
||||
/* Bits used to recored how a task's stack and TCB were allocated. */
|
||||
/* Bits used to record how a task's stack and TCB were allocated. */
|
||||
#define tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB ( ( uint8_t ) 0 )
|
||||
#define tskSTATICALLY_ALLOCATED_STACK_ONLY ( ( uint8_t ) 1 )
|
||||
#define tskSTATICALLY_ALLOCATED_STACK_AND_TCB ( ( uint8_t ) 2 )
|
||||
|
@ -100,8 +100,8 @@
|
|||
#define tskSUSPENDED_CHAR ( 'S' )
|
||||
|
||||
/*
|
||||
* Some kernel aware debuggers require the data the debugger needs access to be
|
||||
* global, rather than file scope.
|
||||
* Some kernel aware debuggers require the data the debugger needs access to to
|
||||
* be global, rather than file scope.
|
||||
*/
|
||||
#ifdef portREMOVE_STATIC_QUALIFIER
|
||||
#define static
|
||||
|
@ -224,7 +224,7 @@
|
|||
/*-----------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* Several functions take an TaskHandle_t parameter that can optionally be NULL,
|
||||
* Several functions take a TaskHandle_t parameter that can optionally be NULL,
|
||||
* where NULL is used to indicate that the handle of the currently executing
|
||||
* task should be used in place of the parameter. This macro simply checks to
|
||||
* see if the parameter is NULL and returns a pointer to the appropriate TCB.
|
||||
|
@ -338,7 +338,7 @@ typedef tskTCB TCB_t;
|
|||
PRIVILEGED_DATA TCB_t * volatile pxCurrentTCB = NULL;
|
||||
|
||||
/* Lists for ready and blocked tasks. --------------------
|
||||
* xDelayedTaskList1 and xDelayedTaskList2 could be move to function scople but
|
||||
* xDelayedTaskList1 and xDelayedTaskList2 could be moved to function scope but
|
||||
* doing so breaks some kernel aware debuggers and debuggers that rely on removing
|
||||
* the static qualifier. */
|
||||
PRIVILEGED_DATA static List_t pxReadyTasksLists[ configMAX_PRIORITIES ]; /*< Prioritised ready tasks. */
|
||||
|
@ -748,7 +748,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
|||
/* Allocate space for the stack used by the task being created.
|
||||
* The base of the stack memory stored in the TCB so the task can
|
||||
* be deleted later if required. */
|
||||
pxNewTCB->pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
|
||||
pxNewTCB->pxStack = ( StackType_t * ) pvPortMallocStack( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
|
||||
|
||||
if( pxNewTCB->pxStack == NULL )
|
||||
{
|
||||
|
@ -763,7 +763,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
|||
StackType_t * pxStack;
|
||||
|
||||
/* Allocate space for the stack used by the task being created. */
|
||||
pxStack = pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e9079 All values returned by pvPortMalloc() have at least the alignment required by the MCU's stack and this allocation is the stack. */
|
||||
pxStack = pvPortMallocStack( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e9079 All values returned by pvPortMalloc() have at least the alignment required by the MCU's stack and this allocation is the stack. */
|
||||
|
||||
if( pxStack != NULL )
|
||||
{
|
||||
|
@ -779,7 +779,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;
|
|||
{
|
||||
/* The stack cannot be used as the TCB was not created. Free
|
||||
* it again. */
|
||||
vPortFree( pxStack );
|
||||
vPortFreeStack( pxStack );
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -1660,7 +1660,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )
|
|||
if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xStateListItem ) ) != pdFALSE )
|
||||
{
|
||||
/* The task is currently in its ready list - remove before
|
||||
* adding it to it's new ready list. As we are in a critical
|
||||
* adding it to its new ready list. As we are in a critical
|
||||
* section we can do this even if the scheduler is suspended. */
|
||||
if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
|
||||
{
|
||||
|
@ -2694,8 +2694,8 @@ BaseType_t xTaskCatchUpTicks( TickType_t xTicksToCatchUp )
|
|||
#if ( configUSE_PREEMPTION == 1 )
|
||||
{
|
||||
/* Preemption is on, but a context switch should only be
|
||||
* performed if the unblocked task has a priority that is
|
||||
* equal to or higher than the currently executing task. */
|
||||
* performed if the unblocked task has a priority that is
|
||||
* higher than the currently executing task. */
|
||||
if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )
|
||||
{
|
||||
/* Pend the yield to be performed when the scheduler
|
||||
|
@ -2787,7 +2787,7 @@ BaseType_t xTaskIncrementTick( void )
|
|||
* state - so record the item value in
|
||||
* xNextTaskUnblockTime. */
|
||||
xNextTaskUnblockTime = xItemValue;
|
||||
break; /*lint !e9011 Code structure here is deedmed easier to understand with multiple breaks. */
|
||||
break; /*lint !e9011 Code structure here is deemed easier to understand with multiple breaks. */
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -3950,7 +3950,7 @@ static void prvCheckTasksWaitingTermination( void )
|
|||
{
|
||||
/* The task can only have been allocated dynamically - free both
|
||||
* the stack and TCB. */
|
||||
vPortFree( pxTCB->pxStack );
|
||||
vPortFreeStack( pxTCB->pxStack );
|
||||
vPortFree( pxTCB );
|
||||
}
|
||||
#elif ( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e731 !e9029 Macro has been consolidated for readability reasons. */
|
||||
|
@ -3962,7 +3962,7 @@ static void prvCheckTasksWaitingTermination( void )
|
|||
{
|
||||
/* Both the stack and TCB were allocated dynamically, so both
|
||||
* must be freed. */
|
||||
vPortFree( pxTCB->pxStack );
|
||||
vPortFreeStack( pxTCB->pxStack );
|
||||
vPortFree( pxTCB );
|
||||
}
|
||||
else if( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_ONLY )
|
||||
|
@ -4434,7 +4434,9 @@ static void prvResetNextTaskUnblockTime( void )
|
|||
*
|
||||
* vTaskList() calls uxTaskGetSystemState(), then formats part of the
|
||||
* uxTaskGetSystemState() output into a human readable table that
|
||||
* displays task names, states and stack usage.
|
||||
* displays task: names, states, priority, stack usage and task number.
|
||||
* Stack usage specified as the number of unused StackType_t words stack can hold
|
||||
* on top of stack - not the number of bytes.
|
||||
*
|
||||
* vTaskList() has a dependency on the sprintf() C library function that
|
||||
* might bloat the code size, use a lot of stack, and provide different
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue