mirror of
https://github.com/eclipse-threadx/threadx.git
synced 2026-10-06 06:59:08 +08:00
Allowed tx_timer_change to be called from tx_application_define (#730)
Fixes #224 `_txe_timer_change` returned `TX_CALLER_ERROR` for any call at or above `TX_INITIALIZE_IN_PROGRESS`, making `tx_timer_change` the only timer service that could not be called from `tx_application_define` -- while still being allowed from an ISR. The check has no technical basis: `_tx_timer_change` only writes the expiration fields of a timer that is not on an active list, with interrupts disabled. Removed it from both the `common` and `common_smp` copies of `txe_timer_change.c`, with the now-unused includes and the `TX_CALLER_ERROR` line in the header comment. Relaxing an error check is backward compatible. `testcontrol.c` in both suites now calls `tx_timer_change` at initialization, so the timer simple test covers it: `ERROR #30` on `dev`, green with the fix. 116/116 SMP, 103/103 non-SMP. Assisted-by: Copilot (Opus 5) <noreply@github.com>
This commit is contained in:
@@ -9,6 +9,8 @@
|
||||
* SPDX-License-Identifier: MIT
|
||||
**************************************************************************/
|
||||
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
/**************************************************************************/
|
||||
@@ -26,8 +28,6 @@
|
||||
/* Include necessary system files. */
|
||||
|
||||
#include "tx_api.h"
|
||||
#include "tx_initialize.h"
|
||||
#include "tx_thread.h"
|
||||
#include "tx_timer.h"
|
||||
|
||||
|
||||
@@ -56,7 +56,6 @@
|
||||
/* */
|
||||
/* TX_TIMER_ERROR Invalid application timer pointer */
|
||||
/* TX_TICK_ERROR Invalid initial tick value of 0 */
|
||||
/* TX_CALLER_ERROR Invalid caller of this function */
|
||||
/* status Actual completion status */
|
||||
/* */
|
||||
/* CALLS */
|
||||
@@ -98,13 +97,6 @@ UINT status;
|
||||
status = TX_TICK_ERROR;
|
||||
}
|
||||
|
||||
/* Check for invalid caller of this function. */
|
||||
else if (TX_THREAD_GET_SYSTEM_STATE() >= TX_INITIALIZE_IN_PROGRESS)
|
||||
{
|
||||
|
||||
/* Invalid caller of this function, return appropriate error code. */
|
||||
status = TX_CALLER_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
* SPDX-License-Identifier: MIT
|
||||
**************************************************************************/
|
||||
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
/**************************************************************************/
|
||||
@@ -26,8 +28,6 @@
|
||||
/* Include necessary system files. */
|
||||
|
||||
#include "tx_api.h"
|
||||
#include "tx_initialize.h"
|
||||
#include "tx_thread.h"
|
||||
#include "tx_timer.h"
|
||||
|
||||
|
||||
@@ -56,7 +56,6 @@
|
||||
/* */
|
||||
/* TX_TIMER_ERROR Invalid application timer pointer */
|
||||
/* TX_TICK_ERROR Invalid initial tick value of 0 */
|
||||
/* TX_CALLER_ERROR Invalid caller of this function */
|
||||
/* status Actual completion status */
|
||||
/* */
|
||||
/* CALLS */
|
||||
@@ -98,13 +97,6 @@ UINT status;
|
||||
status = TX_TICK_ERROR;
|
||||
}
|
||||
|
||||
/* Check for invalid caller of this function. */
|
||||
else if (TX_THREAD_GET_SYSTEM_STATE() >= TX_INITIALIZE_IN_PROGRESS)
|
||||
{
|
||||
|
||||
/* Invalid caller of this function, return appropriate error code. */
|
||||
status = TX_CALLER_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
/* This is the test control routine of the ThreadX kernel. All tests are dispatched from this routine. */
|
||||
// Some portions generated by Codex (gpt 5.5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
#define TX_THREAD_SMP_SOURCE_CODE
|
||||
|
||||
@@ -65,6 +66,7 @@ TX_BLOCK_POOL init_block_pool;
|
||||
ULONG init_block_pool_area[50];
|
||||
TX_EVENT_FLAGS_GROUP init_event_flags;
|
||||
TX_TIMER init_timer;
|
||||
TX_TIMER init_timer_change;
|
||||
TX_THREAD init_test_thread;
|
||||
TX_THREAD second_test_thread;
|
||||
#ifndef TX_TIMER_PROCESS_IN_ISR
|
||||
@@ -692,6 +694,11 @@ TX_THREAD *thread_ptr;
|
||||
test_timer_create_init = tx_timer_create(&init_timer, "init timer", init_timer_entry, 0x5678,
|
||||
100, 200, TX_AUTO_ACTIVATE);
|
||||
|
||||
/* Test timer change from initialization. */
|
||||
test_timer_create_init += tx_timer_create(&init_timer_change, "init timer change", init_timer_entry, 0x5678,
|
||||
100, 200, TX_NO_ACTIVATE);
|
||||
test_timer_create_init += tx_timer_change(&init_timer_change, 50, 100);
|
||||
|
||||
/* Test calling tx_thread_relinquish to see if the error checking throws it out. */
|
||||
tx_thread_relinquish();
|
||||
#endif
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
/* This is the test control routine of the ThreadX kernel. All tests are dispatched from this routine. */
|
||||
// Some portions generated by Codex (gpt 5.4).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
#include "tx_api.h"
|
||||
#include <stdio.h>
|
||||
@@ -69,6 +70,7 @@ TX_BLOCK_POOL init_block_pool;
|
||||
ULONG init_block_pool_area[50];
|
||||
TX_EVENT_FLAGS_GROUP init_event_flags;
|
||||
TX_TIMER init_timer;
|
||||
TX_TIMER init_timer_change;
|
||||
TX_THREAD init_test_thread;
|
||||
TX_THREAD second_test_thread;
|
||||
#ifndef TX_TIMER_PROCESS_IN_ISR
|
||||
@@ -567,6 +569,11 @@ TX_THREAD *thread_ptr;
|
||||
test_timer_create_init = tx_timer_create(&init_timer, "init timer", init_timer_entry, 0x5678,
|
||||
100, 200, TX_AUTO_ACTIVATE);
|
||||
|
||||
/* Test timer change from initialization. */
|
||||
test_timer_create_init += tx_timer_create(&init_timer_change, "init timer change", init_timer_entry, 0x5678,
|
||||
100, 200, TX_NO_ACTIVATE);
|
||||
test_timer_create_init += tx_timer_change(&init_timer_change, 50, 100);
|
||||
|
||||
/* Test calling tx_thread_relinquish to see if the error checking throws it out. */
|
||||
tx_thread_relinquish();
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user