ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
7 сентября
1602973 Топик полностью
klen (Сегодня, 00:46, просмотров: 13)
в FreeRTOS добавлена новая фукция периодической задержки таски. 

* task. h

* @code{c}

* TickType_t xTaskPeriodicDelay( TickType_t *pxPreviousWakeTime, const TickType_t xTimeIncrement );

* @endcode

*

* INCLUDE_xTaskDelayUntil must be defined as 1 for this function to be available.

* See the configuration section for more information.

*

* Periodic task delay to ensure a constant execution frequency.

*

* This function is similar to xTaskDelayUntil () with a few important differences:

* - pxPreviousWakeTime contains the last past wake time, so it never runs away

* - if you suspend the task, when you resume it pxPreviousWakeTime will instantly

* catch up all skipped increments

* - it returns the number of increments added to pxPreviosWakeTime

*

* @param pxPreviousWakeTime Pointer to a variable that holds the time at which the

* task was last unblocked. The variable must be initialised with the current time

* prior to its first use. Following this the variable is automatically updated.

*

* @param xTimeIncrement The cycle time period. The task will be unblocked at

* time *pxPreviousWakeTime + xTimeIncrement. Passing the same xTimeIncrement

* parameter value will cause the task to execute with a fixed interval.

*

* @return Number of times xTimeIncrement has been added to pxPreviousWakeTime.

* It is 0 on the first call or if not enough ticks have been elapsed since the

* last call, 1 in normal circumstances or more than 1 if some period has been

* skipped for some reason (e.g. when the caller task is suspended for more than

* xTimeIncrement ticks).

*

* \defgroup xTaskPeriodicDelay xTaskPeriodicDelay

* \ingroup TaskCtrl

*/

TickType_t xTaskPeriodicDelay( TickType_t * const pxPreviousWakeTime,

const TickType_t xTimeIncrement ) PRIVILEGED_FUNCTION;


если кто хочет глуже - вот ее код

    TickType_t xTaskPeriodicDelay( TickType_t * const pxPreviousWakeTime,
                                   const TickType_t xTimeIncrement )
    {
        TickType_t xIncrements, xTicksIncrements, xTicksToWait;

        traceENTER_xTaskPeriodicDelay( pxPreviousWakeTime, xTimeIncrement );

        configASSERT( pxPreviousWakeTime );
        configASSERT( ( xTimeIncrement > 0U ) );

        vTaskSuspendAll();
        {
            /* As long as everything is the same type, this plays well with overflows */
            const TickType_t xTicksElapsed = xTickCount - *pxPreviousWakeTime;

            configASSERT( uxSchedulerSuspended == 1U );

            /* Number of increments to catch up: it could be 0 if
             * not enough ticks have elapsed, 1 in the common case or
             * more than 1 if the task has not been resumed in time */
            xIncrements = xTicksElapsed / xTimeIncrement;
            xTicksIncrements = xIncrements * xTimeIncrement;

            /* Update to the last wake time */
            *pxPreviousWakeTime += xTicksIncrements;

            /* Ticks to the next wake time */
            xTicksToWait = xTimeIncrement - ( xTicksElapsed - xTicksIncrements );

            prvAddCurrentTaskToDelayedList( xTicksToWait, pdFALSE );
        }

        /* Force a reschedule if xTaskResumeAll has not already done so, we may
         * have put ourselves to sleep. */
        if( xTaskResumeAll() == pdFALSE )
        {
            taskYIELD_WITHIN_API();
        }
        else
        {
            mtCOVERAGE_TEST_MARKER();
        }

        traceRETURN_xTaskPeriodicDelay( xIncrements );

        return xIncrements;
    }



также изменеия в крайнем релизе, если короток - в основном MPU+безопасность


Changes between FreeRTOS V11.3.0 and FreeRTOS V11.3.1 released August 2026

+ Add Symmetric Multiprocessing (SMP) support to the Armv8-M ports for the

GCC, ArmClang and IAR toolchains. This adds per core critical nesting

state, spinlocks, inter-core yield and wakeup using SEV/WFE, primary and

secondary core bring up synchronization, and a core safe PendSV context

switch. Single core builds are unchanged. We thank @AhmedIsmail02 for

their contribution.

+ Add new xTaskPeriodicDelay API for periodic tasks. It supersedes

xTaskDelayUntil by preventing run away of pxPreviousWakeTime, catching up

skipped periods immediately while returning the number of periods skipped,

and returning 0 when not enough ticks have elapsed. We thank @ntd for

their contribution.

+ Add uxTaskCallForEachTask API, which invokes a caller supplied callback

for each task in the system, and refactor uxTaskGetSystemState to use it.

We thank @DRNadler for their contribution.

+ Add configIDLE_AFFINITY configuration option, which pins each Idle task to

its corresponding core in SMP systems. It defaults to 0, which allows the

scheduler to run Idle tasks on any available core. We thank @rus084 for

their contribution.

+ Add validation to SecureContext_AllocateContext in the ARMv8-M secure side

ports to ensure that the requested secure stack size plus the stack seal

size does not overflow before allocating. We thank Jordan Mecom (Block,

Inc.) for reporting this issue.

+ Add assertions to vQueueDelete to check that no tasks are blocked on the

queue being deleted.

+ Add a link to the FreeRTOS Kernel threat model in SECURITY.md.

+ Add documentation clarifying that the MemoryRegion_t ulParameters macros

are port specific, so applications must use the tskMPU_REGION_* or

portMPU_REGION_* values that match their MPU port. We thank @Old-Ding for

their contribution.

+ Add a comment documenting that a privileged task must revoke access

permissions before deleting a kernel object when using Access Control

Lists.

+ Update the ARM_CRx_No_GIC port to declare vPortYield as a weak symbol so

that devices with a dedicated software interrupt register can substitute

their own yield trigger. The default behavior is unchanged. We thank

@maximdeclercq for their contribution.

+ Update the FreeRTOSConfig.h template to use a 32-bit tick type, which

avoids compiler warnings on Windows where a 64-bit tick resolves to

unsigned long long.

+ Update the deprecated CMake configuration warning to use INTERFACE rather

than PUBLIC for the freertos_config interface library. We thank @Isla-jq

for their contribution.

+ Fix vPortFreeSecureContext in the ARMv8-M ports to read xSecureContext at

the correct offset. When the MPU is enabled, the first item in the TCB is

the stored context location rather than the top of stack, so

xSecureContext is located at a negative offset from that position.

+ Fix SecureContext_AllocateContext in the ARMv8-M secure side ports to

reject a secure stack size smaller than the stack seal size.

+ Fix SecureContext_FreeContext in the ARMv8-M secure side ports to refuse

to free the secure context that is currently loaded, as indicated by

PSPLIM. Freeing it left the running task referencing freed secure memory.

The task handle supplied by the non-secure side is untrusted, so it is

now used only as an additional ownership check.

+ Fix the ARMv8-M ports to service the portSVC_START_SCHEDULER and

portSVC_FREE_SECURE_CONTEXT supervisor calls only when they are raised

from privileged code. When the MPU is enabled, both requests are now

ignored unless the calling program counter lies within the privileged

functions section.

+ Fix a type confusion in xQueueAddToSet by verifying that the object

passed as the queue set really is a queue set, that is, that its item

size is sizeof( Queue_t * ). Passing an ordinary queue now returns

pdFAIL rather than allowing prvNotifyQueueSetContainer to copy item size

bytes from a single pointer on the stack.

+ Fix xTimerGenericCommandFromTask to validate the lower bound of

xCommandID in addition to the existing upper bound, so that only the

valid task command range from tmrCOMMAND_START_DONT_TRACE to

tmrCOMMAND_DELETE is accepted. Rejected commands return pdFAIL, and

behavior for valid commands and for xTimerGenericCommandFromISR is

unchanged.

+ Fix a kernel object pool entry leak by adding an MPU wrapper for the

xTimerDelete API, so that the pool index is freed when a timer is deleted

with MPU wrappers version 2.

+ Fix the MPU wrapper macro mapping for the ARMv8-M ports.

+ Fix silently failing critical sections in unprivileged tasks by

disallowing configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS with MPU wrappers

version 2 in the ARMv7-M MPU ports. The option now defaults to 0 under

version 2, and explicitly setting it to 1 raises a compile time error.

Behavior with MPU wrappers version 1 is unchanged.

+ Fix a time of check to time of use race condition in vTaskListTasks, where

reading the volatile task count twice allowed a task to be created between

the reads, resulting in an undersized allocation and a possible buffer

overflow in uxTaskGetSystemState. We thank @srpatcha for their

contribution.

+ Fix a spurious heap_5 assertion when configENABLE_HEAP_PROTECTOR is 1 and

an allocation cannot be satisfied. The free block search reaching the end

marker is a normal out of memory condition, so pvPortMalloc now returns

NULL and invokes the malloc failed hook instead of asserting.

+ Fix batching stream buffers to unblock a receiver only after the buffered

byte count exceeds, rather than reaches, the trigger level. Previously a

receiver could be woken early and xStreamBufferReceive could return 0

bytes. Stream buffer and message buffer semantics are unchanged. We thank

@officialasishkumar for their contribution.

+ Fix MISRA C 2012 Rule 20.4 violation by replacing `#define static` with a

STATIC macro, which also keeps the static variables in

vApplicationGetIdleTaskMemory and vApplicationGetPassiveIdleTaskMemory

static when portREMOVE_STATIC_QUALIFIER is defined. We thank @elsonwei for

their contribution.

+ Fix undefined behavior in the MSVC-MingW port caused by left shifting a

signed int by 31 or more bits.

+ Fix a duplicate Doxygen \defgroup identifier by giving

uxTaskBasePriorityGet its own group instead of reusing the

uxTaskPriorityGet group.

+ Fix the incorrect #endif comment after vPortSetupTimerInterrupt in the GCC

and IAR RISC-V ports, which duplicated configMTIME_BASE_ADDRESS and

omitted configMTIMECMP_BASE_ADDRESS. We thank @cuiweixie for their

contribution.

+ Fix incorrect #endif comments in croutine.c and queue.c, which reversed

the configUSE_CO_ROUTINES condition and named the wrong configuration

option for configSUPPORT_DYNAMIC_ALLOCATION. We thank @Zepp-Hanzj for

their contribution.

+ Fix the configLIST_VOLATILE #endif comment and the documented parameter

names for uxListRemove in include/list.h. We thank @rakeshr-source for

their contribution.

+ Fix the type and timeout values used in the xStreamBufferSend and

xMessageBufferSend documentation examples. We thank @Isla-jq for their

contribution.

+ Fix copy and paste comment typos in xTaskGetApplicationTaskTag and

xTaskGetApplicationTaskTagFromISR, and a typo in the

xTaskGenericNotifyWait comment. We thank @wanghengZzz for their

contributions.

+ Fix comment typos in the queue.h, list.h and task.h documentation,

including the xQueueReceiveFromISR and xQueueGenericSend examples, the

listGET_ITEM_VALUE_OF_HEAD_ENTRY \page tag, and the uxIndexToCLear typo.

We thank @zepp-chen for their contribution.

+ Fix the FreeRTOSConfig.h template path referenced in README.md. We thank

@IClementI for their contribution.

+ Fix the missing V prefix in the release_tag and namespace-prefix inputs of

the auto release workflow.

+ Fix long path failures in the Windows kernel demo builds by enabling

Windows long path support in CI.

+ Remove an unnecessary const variable from the GCC and IAR RISC-V ports. We

thank @IClementI for their contribution.