mirror of
https://github.com/eclipse-threadx/threadx.git
synced 2026-10-06 06:59:08 +08:00
Replaced the GNU-only dsb/isb 0xF operands with the UAL sy form (#729)
Fixes #551 `_tx_thread_system_return_inline()` in the Cortex-M `tx_port.h` headers spells its barriers `dsb 0xF` and `isb 0xF`. A bare hexadecimal operand is a GNU assembler extension, and IAR rejects it with `operand syntax error`, so the header cannot be included at all. The block is guarded for GCC, armclang and IAR together, so every IAR user of an affected port hits it -- four independent reports on Cortex-M33 and M7 with EWARM 9.50 and 9.70. Both operands become `sy`, the Arm UAL name for exactly what `0xF` encodes. The generated instruction is unchanged. Applied to the two `ports_arch` masters and all 32 copies under `ports`, covering M0, M23, M3, M33, M4, M52, M55, M7 and M85 across ac5, ac6, gnu, iar and keil, plus the `scripts/check_ports.sh` probes that matched the old spelling. `check_ports.sh` passes, the copy scripts still reproduce every generated port byte for byte, and `arm-none-eabi-gcc -O2` compiles a caller for every patched header, emitting `dsb sy` and `isb sy`. Three headers that need toolchain intrinsics GCC does not ship fail identically on `dev`. 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).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
/**************************************************************************/
|
||||
@@ -322,13 +324,13 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_primask_value();
|
||||
__enable_interrupts();
|
||||
__restore_interrupts(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
**************************************************************************/
|
||||
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -324,13 +325,13 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_primask_value();
|
||||
__enable_interrupts();
|
||||
__restore_interrupts(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
* SPDX-License-Identifier: MIT
|
||||
**************************************************************************/
|
||||
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
/**************************************************************************/
|
||||
@@ -313,13 +315,13 @@ __istate_t interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_IPSR() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_state();
|
||||
__enable_interrupt();
|
||||
__set_interrupt_state(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
**************************************************************************/
|
||||
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -378,7 +379,7 @@ unsigned int was_masked;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (_get_ipsr() == 0)
|
||||
{
|
||||
was_masked = __disable_irq();
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
**************************************************************************/
|
||||
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -391,13 +392,13 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (_get_ipsr() == 0)
|
||||
{
|
||||
interrupt_save = __get_primask_value();
|
||||
__enable_interrupts();
|
||||
__restore_interrupts(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
* SPDX-License-Identifier: MIT
|
||||
**************************************************************************/
|
||||
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
/**************************************************************************/
|
||||
@@ -399,7 +401,7 @@ __istate_t interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_IPSR() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_state();
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Claude Sonnet 4.6).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ unsigned int interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Claude Sonnet 4.6).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ unsigned int interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Claude Sonnet 4.6).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ unsigned int interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Claude Sonnet 4.6).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ unsigned int interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Claude Sonnet 4.6).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ unsigned int interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ UINT interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (_tx_ipsr_get() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ UINT interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ UINT interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (_tx_ipsr_get() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ UINT interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ UINT interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (_tx_ipsr_get() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ UINT interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Claude Sonnet 4.6).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ unsigned int interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Claude Sonnet 4.6).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ unsigned int interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Claude Sonnet 4.6).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ unsigned int interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Claude Sonnet 4.6).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ unsigned int interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Claude Sonnet 4.6).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ unsigned int interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ UINT interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (_tx_ipsr_get() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ UINT interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ UINT interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (_tx_ipsr_get() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ UINT interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ UINT interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (_tx_ipsr_get() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ UINT interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ UINT interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (_tx_ipsr_get() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ UINT interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ UINT interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (_tx_ipsr_get() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ UINT interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ UINT interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (_tx_ipsr_get() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ UINT interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Claude Sonnet 4.6).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ unsigned int interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Claude Sonnet 4.6).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ unsigned int interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Claude Sonnet 4.6).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ unsigned int interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Claude Sonnet 4.6).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ unsigned int interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ UINT interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (_tx_ipsr_get() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ UINT interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ UINT interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (_tx_ipsr_get() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ UINT interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ UINT interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (_tx_ipsr_get() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ UINT interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Copilot (Claude Sonnet 4.6).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ unsigned int interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (__get_ipsr_value() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ unsigned int interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
// Some portions generated by Gemini (Gemini 2.0 Flash).
|
||||
// Some portions generated by Claude Code (Opus 5).
|
||||
// Some portions generated by Copilot (Opus 5).
|
||||
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -583,7 +584,7 @@ UINT interrupt_save;
|
||||
|
||||
/* Set PendSV to invoke ThreadX scheduler. */
|
||||
*((volatile ULONG *) 0xE000ED04) = ((ULONG) 0x10000000);
|
||||
__asm__ volatile ("dsb 0xF \n isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("dsb sy \n isb sy " : : : "memory");
|
||||
if (_tx_ipsr_get() == 0)
|
||||
{
|
||||
interrupt_save = __get_interrupt_posture();
|
||||
@@ -593,7 +594,7 @@ UINT interrupt_save;
|
||||
__enable_interrupts();
|
||||
#endif
|
||||
__restore_interrupt(interrupt_save);
|
||||
__asm__ volatile ("isb 0xF " : : : "memory");
|
||||
__asm__ volatile ("isb sy " : : : "memory");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -261,7 +261,7 @@ say "== Families with no copy script (report only) =="
|
||||
if [ "$quiet" -eq 0 ]; then
|
||||
for family in ports/cortex_m0 ports/cortex_m0+ ports/cortex_m23; do
|
||||
[ -d "$family" ] || continue
|
||||
for probe in "dsb 0xF" "isb 0xF"; do
|
||||
for probe in "dsb sy" "isb sy"; do
|
||||
have=""; missing=""
|
||||
for header in "$family"/*/inc/tx_port.h; do
|
||||
[ -f "$header" ] || continue
|
||||
|
||||
Reference in New Issue
Block a user