Introduces Regression for 32 and 64 bit threadx and smp kernel in Debug, MinSizeRel and Release configuration #4
@@ -1,8 +1,6 @@
|
||||
cmake_minimum_required(VERSION 3.24)
|
||||
project(smp_demo LANGUAGES C ASM)
|
||||
|
||||
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/ThreadXSmpOffsets.cmake)
|
||||
|
||||
set(THREADX_COMMON_SMP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../third-party/threadx/common_smp)
|
||||
if(NOT EXISTS "${THREADX_COMMON_SMP_DIR}")
|
||||
message(FATAL_ERROR "could not find ThreadX SMP sources, is the submodule checked out?")
|
||||
@@ -31,19 +29,6 @@ set(THREADX_SMP_CUSTOM_SRC
|
||||
src/tx_timer_interrupt.c
|
||||
)
|
||||
|
||||
threadx_smp_add_offsets(
|
||||
TARGET threadx_smp_offsets
|
||||
OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated
|
||||
SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/src/tx_asm_offsets.c
|
||||
INCLUDE_DIRS
|
||||
${THREADX_COMMON_SMP_DIR}/inc
|
||||
${THREADX_SMP_CUSTOM_INC}
|
||||
DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/inc/tx_port.h
|
||||
${THREADX_COMMON_SMP_DIR}/inc/tx_api.h
|
||||
OUT_INCLUDE_DIR THREADX_SMP_GENERATED_INC_DIR
|
||||
)
|
||||
|
||||
set(THREADX_SMP_SOURCES
|
||||
${THREADX_COMMON_SMP_DIR}/src/tx_block_allocate.c
|
||||
${THREADX_COMMON_SMP_DIR}/src/tx_block_pool_cleanup.c
|
||||
@@ -250,8 +235,4 @@ target_include_directories(threadx_smp PUBLIC
|
||||
${THREADX_COMMON_SMP_DIR}/inc
|
||||
${THREADX_SMP_CUSTOM_INC}
|
||||
)
|
||||
target_include_directories(threadx_smp PRIVATE
|
||||
${THREADX_SMP_GENERATED_INC_DIR}
|
||||
)
|
||||
target_compile_definitions(threadx_smp PRIVATE TX_QUEUE_MESSAGE_MAX_SIZE=16) #This is addressed in PR #503
|
||||
add_dependencies(threadx_smp threadx_smp_offsets)
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
function(threadx_smp_add_offsets)
|
||||
set(options)
|
||||
set(oneValueArgs TARGET OUTPUT_DIR SOURCE OUT_INCLUDE_DIR)
|
||||
set(multiValueArgs INCLUDE_DIRS COMPILE_DEFINITIONS DEPENDS)
|
||||
cmake_parse_arguments(THREADX_SMP_OFFSETS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
|
||||
if(NOT THREADX_SMP_OFFSETS_TARGET)
|
||||
message(FATAL_ERROR "threadx_smp_add_offsets requires TARGET")
|
||||
endif()
|
||||
|
||||
if(NOT THREADX_SMP_OFFSETS_OUTPUT_DIR)
|
||||
message(FATAL_ERROR "threadx_smp_add_offsets requires OUTPUT_DIR")
|
||||
endif()
|
||||
|
||||
if(NOT THREADX_SMP_OFFSETS_SOURCE)
|
||||
message(FATAL_ERROR "threadx_smp_add_offsets requires SOURCE")
|
||||
endif()
|
||||
|
||||
if(NOT THREADX_SMP_OFFSETS_OUT_INCLUDE_DIR)
|
||||
message(FATAL_ERROR "threadx_smp_add_offsets requires OUT_INCLUDE_DIR")
|
||||
endif()
|
||||
|
||||
set(threadx_smp_generate_script "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/GenerateAsmOffsets.cmake")
|
||||
set(threadx_smp_offset_asm "${THREADX_SMP_OFFSETS_OUTPUT_DIR}/tx_asm_offsets.s")
|
||||
set(threadx_smp_offset_inc "${THREADX_SMP_OFFSETS_OUTPUT_DIR}/tx_asm_offsets.inc")
|
||||
|
||||
set(threadx_smp_offset_include_args ${THREADX_SMP_OFFSETS_INCLUDE_DIRS})
|
||||
list(TRANSFORM threadx_smp_offset_include_args PREPEND -I)
|
||||
|
||||
set(threadx_smp_offset_define_args ${THREADX_SMP_OFFSETS_COMPILE_DEFINITIONS})
|
||||
list(TRANSFORM threadx_smp_offset_define_args PREPEND -D)
|
||||
|
||||
set(threadx_smp_offset_cflags ${CMAKE_C_FLAGS})
|
||||
if(CMAKE_BUILD_TYPE)
|
||||
string(TOUPPER "${CMAKE_BUILD_TYPE}" threadx_smp_build_type_upper)
|
||||
list(APPEND threadx_smp_offset_cflags ${CMAKE_C_FLAGS_${threadx_smp_build_type_upper}})
|
||||
endif()
|
||||
separate_arguments(threadx_smp_offset_cflags)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${threadx_smp_offset_inc}
|
||||
BYPRODUCTS ${threadx_smp_offset_asm}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${THREADX_SMP_OFFSETS_OUTPUT_DIR}
|
||||
COMMAND ${CMAKE_C_COMPILER}
|
||||
${CMAKE_C_COMPILER_ARG1}
|
||||
${threadx_smp_offset_cflags}
|
||||
${threadx_smp_offset_include_args}
|
||||
${threadx_smp_offset_define_args}
|
||||
-S
|
||||
-o ${threadx_smp_offset_asm}
|
||||
${THREADX_SMP_OFFSETS_SOURCE}
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-DINPUT=${threadx_smp_offset_asm}
|
||||
-DOUTPUT=${threadx_smp_offset_inc}
|
||||
-P ${threadx_smp_generate_script}
|
||||
DEPENDS
|
||||
${THREADX_SMP_OFFSETS_SOURCE}
|
||||
${threadx_smp_generate_script}
|
||||
${THREADX_SMP_OFFSETS_DEPENDS}
|
||||
COMMAND_EXPAND_LISTS
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
add_custom_target(${THREADX_SMP_OFFSETS_TARGET} DEPENDS ${threadx_smp_offset_inc})
|
||||
|
||||
set(${THREADX_SMP_OFFSETS_OUT_INCLUDE_DIR} ${THREADX_SMP_OFFSETS_OUTPUT_DIR} PARENT_SCOPE)
|
||||
endfunction()
|
||||
@@ -57,26 +57,26 @@
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
#if __riscv_xlen == 64
|
||||
#define SLL32 sllw
|
||||
#define STORE sd
|
||||
#define LOAD ld
|
||||
#define LWU lwu
|
||||
#define AMOSWAP_AQ amoswap.d.aq
|
||||
#define AMOSWAP_RL amoswap.d.rl
|
||||
#define LOG_REGBYTES 3
|
||||
#define SLL32 sllw
|
||||
#define STORE sd
|
||||
#define LOAD ld
|
||||
#define LWU lwu
|
||||
#define AMOSWAP_AQ amoswap.d.aq
|
||||
#define AMOSWAP_RL amoswap.d.rl
|
||||
#define LOG_REGBYTES 3
|
||||
#define TX_THREAD_SMP_LOCK_READY_BIT_OFFSET 312 // This changes if thread or timer internal extensions are used
|
||||
#else
|
||||
#define SLL32 sll
|
||||
#define STORE sw
|
||||
#define LOAD lw
|
||||
#define LWU lw
|
||||
#define AMOSWAP_AQ amoswap.w.aq
|
||||
#define AMOSWAP_RL amoswap.w.rl
|
||||
#define LOG_REGBYTES 2
|
||||
#define SLL32 sll
|
||||
#define STORE sw
|
||||
#define LOAD lw
|
||||
#define LWU lw
|
||||
#define AMOSWAP_AQ amoswap.w.aq
|
||||
#define AMOSWAP_RL amoswap.w.rl
|
||||
#define LOG_REGBYTES 2
|
||||
#define TX_THREAD_SMP_LOCK_READY_BIT_OFFSET 168 // This changes if thread or timer internal extensions are used
|
||||
#endif
|
||||
#define REGBYTES (1 << LOG_REGBYTES)
|
||||
|
||||
#include "tx_asm_offsets.inc"
|
||||
|
||||
#else /*not __ASSEMBLER__ */
|
||||
|
||||
/************* Define ThreadX SMP constants. *************/
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
#include <stddef.h>
|
||||
|
||||
#include "tx_api.h"
|
||||
|
||||
#define TX_ASM_OFFSET(symbol, value) __asm__ volatile("\n.ascii \"-->" #symbol " %c0\\n\"" : : "i"(value))
|
||||
|
||||
void tx_asm_offsets_generate(void)
|
||||
{
|
||||
TX_ASM_OFFSET(TX_THREAD_STACK_END_OFFSET, offsetof(TX_THREAD, tx_thread_stack_end));
|
||||
TX_ASM_OFFSET(TX_THREAD_TIME_SLICE_OFFSET, offsetof(TX_THREAD, tx_thread_time_slice));
|
||||
TX_ASM_OFFSET(TX_THREAD_SMP_LOCK_READY_BIT_OFFSET, offsetof(TX_THREAD, tx_thread_smp_lock_ready_bit));
|
||||
}
|
||||
Reference in New Issue
Block a user