nuttx icon indicating copy to clipboard operation
nuttx copied to clipboard

[HELP] Preemptive scheduling with suspend and resume task [s32k148evb]

Open keykur111 opened this issue 2 months ago • 1 comments

Description / Steps to reproduce the issue

Hello all I am trying to implement a test for checking preemptive scheduling using tasks or pthread in nuttx for S32K148_EVB board. my approach is to take tm_preemptive_scheduling_test.c file and write a wrapper for the called functions. Another approach to achieve the resume and suspend is using semaphore as below.

int tm_thread_create(int thread_id, const char *thread_name, int priority,
		int (*entry_function)(int argc, FAR char *argv[]), void *args)
{
		threads[thread_id] = task_create(
                                        thread_name,     // Task Name
                                        priority,       // Task Priority
                                        CONFIG_DEFAULT_TASK_STACKSIZE,  // Task Stack Size
                                        entry_function,  // Task Function
                                        NULL  // Task Arguments
                                    );
}

int tm_thread_suspend(int thread_id)
{
	return sem_wait(&g_bench_semaphores[thread_id]);
}

void tm_thread_resume(int thread_id)
{
	sem_post(&g_bench_semaphores[thread_id]);
}

void tm_thread_sleep(int sec)
{
	sleep(sec);
}

for Nuttx priority i am creating the thread with priority starting for lower with lower value and higher with higher value. Main priority is 100. therefore the change in code tm_preemptive_scheduling_test.c is

    /* Create thread 0 at priority 10.  */
    tm_thread_create(0, 6, tm_preemptive_thread_0_entry);

    /* Create thread 1 at priority 9.  */
    tm_thread_create(1, 7, tm_preemptive_thread_1_entry);

    /* Create thread 2 at priority 8.  */
    tm_thread_create(2, 8, tm_preemptive_thread_2_entry);

    /* Create thread 3 at priority 7.  */
    tm_thread_create(3, 9, tm_preemptive_thread_3_entry);

    /* Create thread 4 at priority 6.  */
    tm_thread_create(4, 10, tm_preemptive_thread_4_entry);

Expected behavior is all 5 thread 0 to thread 4 is in suspend state. (waiting for semaphore) thread_report (prio:highest) goes to sleep thread 0 (prio:6) resume (semaphore release)

release the semaphore of thread 1 thread 1 (prio:7) resume (semaphore release) release the semaphore of thread 2 thread 2 (prio:8) resume (semaphore release) release the semaphore of thread 3 thread 3 (prio:9) resume (semaphore release) release the semaphore of thread 4 thread 4 (prio:10) counter4++; suspend (waiting for semaphore)

thread 3 (prio:9) counter3++; suspend (waiting for semaphore)

thread 2 (prio:8) counter2++; suspend (waiting for semaphore)

thread 1 (prio:7) counter1++; suspend (waiting for semaphore)

thread 0 (prio:6) counter0++; release the semaphore of thread 1 ----> start from top again until sleep for thread_report (prio:highest) expires

Observed behaviour all 5 thread 0 to thread 4 is in suspend state. (waiting for semaphore) thread_report (prio:highest) goes to sleep thread 0 (prio:6) resume (semaphore release)

release the semaphore of thread 1 thread 1 (prio:7) resume (semaphore release) release the semaphore of thread 2 thread 2 (prio:8) resume (semaphore release) release the semaphore of thread 3 thread 3 (prio:9) resume (semaphore release) release the semaphore of thread 4 thread 4 (prio:10) counter4++; suspend (waiting for semaphore) release the semaphore of thread 4

thread 4 (prio:10) counter4++;

thread 4 (prio:10) counter4++;

thread 4 (prio:10) counter4++;

....until sleep for thread_report (prio:highest) expires

On which OS does this issue occur?

[OS: Linux]

What is the version of your OS?

Ubuntu 22.04.5 LTS

NuttX Version

12.10.0-RC0

Issue Architecture

[Arch: arm]

Issue Area

[Area: Other]

Host information

file sysinfo.h not exists NuttX CFLAGS: -Wstrict-prototypes -Wno-attributes -Wno-unknown-pragmas -Wno-psabi -O2
-fno-strict-aliasing -fomit-frame-pointer -fno-common -Wall -Wshadow -Wundef -ffunction-sections -fdata-sections -g3
-mlittle-endian -march=armv7e-m -mtune=cortex-m4 -mfloat-abi=soft -mthumb -Wa-mthumb -Wa-mimplicit-it=always -isystem /home/buildpc/username/07_nuutx_debug/nuttx/include -D__NuttX__ -DNDEBUG

NuttX CXXFLAGS: -Wno-attributes -Wno-unknown-pragmas -nostdinc++ -Wno-psabi -std=\gnu++17
-fno-exceptions -fcheck-new -fno-rtti -O2
-fno-strict-aliasing -fomit-frame-pointer -fno-common -Wall -Wshadow -Wundef -ffunction-sections -fdata-sections -g3
-mlittle-endian -march=armv7e-m -mtune=cortex-m4 -mfloat-abi=soft -mthumb -Wa-mthumb -Wa-mimplicit-it=always -isystem /home/buildpc/username/07_nuutx_debug/nuttx/include/cxx -isystem /home/buildpc/username/07_nuutx_debug/nuttx/include -D__NuttX__ -DNDEBUG

NuttX LDFLAGS: --entry=__start -nostdlib --gc-sections --cref -Map=/home/buildpc/username/07_nuutx_debug/nuttx/nuttx.map

NuttX configuration options: CONFIG_ALLOW_BSD_COMPONENTS=y CONFIG_HOST_LINUX=y CONFIG_APPS_DIR=../nuttx-apps
CONFIG_BASE_DEFCONFIG=\s32k148evb:nsh-dirty
CONFIG_BUILD_FLAT=y CONFIG_MOTOROLA_SREC=y CONFIG_RAW_BINARY=y CONFIG_OUTPUT_STRIP_PATHS=y CONFIG_ARCH_HAVE_STDARG_H=y CONFIG_ARCH_HAVE_SETJMP=y CONFIG_ARCH_NONE_DEBUG_H=y CONFIG_FORTIFY_SOURCE=0 CONFIG_NDEBUG=y CONFIG_DEBUG_ALERT=y CONFIG_ARCH_HAVE_STACKCHECK=y CONFIG_STACK_USAGE_WARNING=0 CONFIG_DEBUG_SYMBOLS=y CONFIG_DEBUG_SYMBOLS_LEVEL=-g3
CONFIG_ARCH_HAVE_CUSTOMOPT=y CONFIG_DEBUG_CUSTOMOPT=y CONFIG_DEBUG_OPTLEVEL=-O2
CONFIG_LTO_NONE=y CONFIG_DEBUG_OPT_UNUSED_SECTIONS=y CONFIG_DEBUG_LINK_MAP=y CONFIG_ARCH_ARM=y CONFIG_ARCH=\arm
CONFIG_ARM_TOOLCHAIN_GNU_EABI=y CONFIG_ARCH_CHIP_S32K1XX=y CONFIG_ARCH_ARMV7M=y CONFIG_ARCH_CORTEXM4=y CONFIG_ARCH_FAMILY=\armv7-m
CONFIG_ARCH_CHIP=\s32k1xx
CONFIG_ARM_THUMB=y CONFIG_ARM_HAVE_MPU_UNIFIED=y CONFIG_ARCH_HAVE_HARDFAULT_DEBUG=y CONFIG_ARCH_HAVE_MEMFAULT_DEBUG=y CONFIG_ARCH_HAVE_BUSFAULT_DEBUG=y CONFIG_ARCH_HAVE_USAGEFAULT_DEBUG=y CONFIG_ARCH_CHIP_S32K148=y CONFIG_ARCH_CHIP_S32K14X=y CONFIG_S32K1XX_HAVE_ENET=y CONFIG_S32K1XX_HAVE_EWM=y CONFIG_S32K1XX_HAVE_FTM2=y CONFIG_S32K1XX_HAVE_FTM3=y CONFIG_S32K1XX_HAVE_FTM4=y CONFIG_S32K1XX_HAVE_FTM5=y CONFIG_S32K1XX_HAVE_FTM6=y CONFIG_S32K1XX_HAVE_FTM7=y CONFIG_S32K1XX_HAVE_HSRUN=y CONFIG_S32K1XX_HAVE_LMEM=y CONFIG_S32K1XX_HAVE_LPI2C1=y CONFIG_S32K1XX_HAVE_LPSPI1=y CONFIG_S32K1XX_HAVE_LPSPI2=y CONFIG_S32K1XX_HAVE_FLEXCAN1=y CONFIG_S32K1XX_HAVE_FLEXCAN2=y CONFIG_S32K1XX_HAVE_SAI=y CONFIG_S32K1XX_HAVE_SPLL=y CONFIG_S32K1XX_LPUART=y CONFIG_S32K1XX_LPUART1=y CONFIG_S32K1XX_WDT_DISABLE=y CONFIG_S32K1XX_FLASHCFG_BACKDOOR1=0xffffffff CONFIG_S32K1XX_FLASHCFG_BACKDOOR2=0xffffffff CONFIG_S32K1XX_FLASHCFG_FPROT=0xffffffff CONFIG_S32K1XX_FLASHCFG_FSEC=0xfe CONFIG_S32K1XX_FLASHCFG_FOPT=0x7f CONFIG_S32K1XX_FLASHCFG_FEPROT=0xff CONFIG_S32K1XX_FLASHCFG_FDPROT=0xff CONFIG_ARCH_TOOLCHAIN_GNU=y CONFIG_ARCH_TOOLCHAIN_GCC=y CONFIG_ARCH_HAVE_IRQTRIGGER=y CONFIG_ARCH_HAVE_IRQPRIO=y CONFIG_ARCH_HAVE_FORK=y CONFIG_ARCH_HAVE_FPU=y CONFIG_ARCH_HAVE_MPU=y CONFIG_ARCH_HAVE_RESET=y CONFIG_ARCH_HAVE_TESTSET=y CONFIG_ARCH_HAVE_THREAD_LOCAL=y CONFIG_ARCH_HAVE_FETCHADD=y CONFIG_ARCH_HAVE_SYSCALL_HOOKS=y CONFIG_ARCH_HAVE_BACKTRACE=y CONFIG_ARCH_HAVE_DEBUG=y CONFIG_ARCH_HAVE_PERF_EVENTS=y CONFIG_ARCH_HAVE_CPUINFO=y CONFIG_ARCH_CPUINFO_FREQ_KHZ=0 CONFIG_ARCH_HAVE_TCBINFO=y CONFIG_ARCH_STACKDUMP=y CONFIG_ARCH_STACKDUMP_MAX_LENGTH=0 CONFIG_ARCH_HAVE_RAMFUNCS=y CONFIG_ARCH_RAMFUNCS=y CONFIG_ARCH_HAVE_RAMVECTORS=y CONFIG_BOARD_LOOPSPERMSEC=6667 CONFIG_ARCH_HAVE_INTERRUPTSTACK=y CONFIG_ARCH_INTERRUPTSTACK=0 CONFIG_ARCH_HAVE_HIPRI_INTERRUPT=y CONFIG_BOOT_RUNFROMFLASH=y CONFIG_RAM_START=0x1ffe0000 CONFIG_RAM_SIZE=258048 CONFIG_FLASH_START=0x0 CONFIG_FLASH_SIZE=0 CONFIG_ARCH_BOARD_S32K148EVB=y CONFIG_ARCH_BOARD=\s32k148evb
CONFIG_ARCH_HAVE_LEDS=y CONFIG_ARCH_LEDS=y CONFIG_ARCH_HAVE_BUTTONS=y CONFIG_ARCH_HAVE_IRQBUTTONS=y CONFIG_BOARD_CRASHDUMP_NONE=y CONFIG_BOARDCTL=y CONFIG_BOARDCTL_MKRD=y CONFIG_BOARD_MEMORY_RANGE=\ CONFIG_DISABLE_OS_API=y CONFIG_USEC_PER_TICK=1000 CONFIG_TIMER_ADJUST_USEC=0 CONFIG_START_YEAR=2021 CONFIG_START_MONTH=9 CONFIG_START_DAY=6 CONFIG_PREALLOC_TIMERS=4 CONFIG_IRQ_NWORKS=8 CONFIG_IRQ_WORK_SECTION=\ CONFIG_IRQ_WORK_STACKSIZE=2048 CONFIG_INIT_ENTRY=y CONFIG_INIT_ARGS=\ CONFIG_INIT_STACKSIZE=2048 CONFIG_INIT_PRIORITY=100 CONFIG_INIT_ENTRYPOINT=\nsh_main
CONFIG_INIT_ENTRYNAME=\nsh_main
CONFIG_RR_INTERVAL=200 CONFIG_TASK_NAME_SIZE=31 CONFIG_SCHED_HAVE_PARENT=y CONFIG_SCHED_WAITPID=y CONFIG_PTHREAD_MUTEX_ROBUST=y CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_NONE=y CONFIG_SCHED_CPULOAD_NONE=y CONFIG_SCHED_CPULOAD_TICKSPERSEC=100 CONFIG_SCHED_PROFILE_TICKSPERSEC=1000 CONFIG_SCHED_STACK_RECORD=0 CONFIG_DEV_CONSOLE=y CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=8 CONFIG_FILE_STREAM=y CONFIG_SIG_PREALLOC_ACTIONS=4 CONFIG_SIG_ALLOC_ACTIONS=1 CONFIG_SIG_PREALLOC_IRQ_ACTIONS=8 CONFIG_SIG_DEFAULT=y CONFIG_SIG_SIGKILL_ACTION=y CONFIG_SIG_SIGSTOP_ACTION=y CONFIG_PREALLOC_MQ_MSGS=8 CONFIG_PREALLOC_MQ_IRQ_MSGS=8 CONFIG_MQ_MAXMSGSIZE=32 CONFIG_DISABLE_MQUEUE_NOTIFICATION=y CONFIG_DEFAULT_TASK_STACKSIZE=2048 CONFIG_IDLETHREAD_STACKSIZE=1024 CONFIG_PTHREAD_STACK_MIN=256 CONFIG_PTHREAD_STACK_DEFAULT=2048 CONFIG_PTHREAD_GUARDSIZE_DEFAULT=0 CONFIG_GROUP_KILL_CHILDREN_TIMEOUT_MS=-1 CONFIG_PID_INITIAL_COUNT=16 CONFIG_ARCH_HAVE_I2CRESET=y CONFIG_DEV_NULL=y CONFIG_DEV_ZERO=y CONFIG_DEV_OPTEE_NONE=y CONFIG_DRVR_MKRD=y CONFIG_ARCH_HAVE_RDWR_MEM_CPU_RUN=y CONFIG_ARCH_HAVE_SERIAL_TERMIOS=y CONFIG_SERIAL=y CONFIG_SERIAL_CONSOLE=y CONFIG_MCU_SERIAL=y CONFIG_STANDARD_SERIAL=y CONFIG_SERIAL_NPOLLWAITERS=4 CONFIG_LPUART1_SERIAL_CONSOLE=y CONFIG_LPUART1_SERIALDRIVER=y CONFIG_LPUART1_RXBUFSIZE=256 CONFIG_LPUART1_TXBUFSIZE=256 CONFIG_LPUART1_BAUD=115200 CONFIG_LPUART1_BITS=8 CONFIG_LPUART1_PARITY=0 CONFIG_LPUART1_2STOP=0 CONFIG_LPUART1_NOIFLOWCONTROL=y CONFIG_SYSLOG=y CONFIG_SYSLOG_DEFAULT_MASK=0xff CONFIG_SYSLOG_CRLF=y CONFIG_SYSLOG_MAX_CHANNELS=1 CONFIG_SYSLOG_DEVPATH=/dev/ttyS1
CONFIG_SYSLOG_DEFAULT=y CONFIG_ARCH_HAVE_PHY=y CONFIG_ARCH_PHY_INTERRUPT=y CONFIG_ARCH_HAVE_NETDEV_STATISTICS=y CONFIG_FS_NEPOLL_DESCRIPTORS=8 CONFIG_FS_LOCK_BUCKET_SIZE=0 CONFIG_SENDFILE_BUFSIZE=512 CONFIG_FS_BACKTRACE=0 CONFIG_FS_MQUEUE_VFS_PATH=/var/mqueue
CONFIG_FS_MQUEUE_NPOLLWAITERS=4 CONFIG_FS_ANONMAP=y CONFIG_FS_PROCFS=y CONFIG_NXFONTS_PACKEDMSFIRST=y CONFIG_MM_DEFAULT_MANAGER=y CONFIG_MM_DEFAULT_ALIGNMENT=8 CONFIG_MM_NODE_GUARDSIZE=0 CONFIG_MM_REGIONS=1 CONFIG_MM_MAP_COUNT_MAX=1024 CONFIG_MM_BACKTRACE=-1 CONFIG_MM_FREE_DELAYCOUNT_MAX=0 CONFIG_MM_HEAP_BIGGEST_COUNT=30 CONFIG_MM_HEAP_MEMPOOL_THRESHOLD=-1 CONFIG_BINFMT_ELF_RELOCATABLE=y CONFIG_STDIO_BUFFER_SIZE=64 CONFIG_STDIO_LINEBUFFER=y CONFIG_NUNGET_CHARS=2 CONFIG_LIBC_LONG_LONG=y CONFIG_ARCH_LOWPUTC=y CONFIG_LIBC_RAND_ORDER=1 CONFIG_LIBC_HOMEDIR=/
CONFIG_LIBC_TMPDIR=/tmp
CONFIG_LIBC_MAX_TMPFILE=32 CONFIG_LIBC_MAX_EXITFUNS=0 CONFIG_POSIX_SPAWN_DEFAULT_STACKSIZE=2048 CONFIG_LIBC_HOSTNAME=\ CONFIG_LIBC_OPEN_MAX=256 CONFIG_NAME_MAX=32 CONFIG_PATH_MAX=256 CONFIG_LINE_MAX=80 CONFIG_LIBC_STRERROR_ERRNUM=y CONFIG_LIBC_NEWLIB_OPTSPEED=y CONFIG_LIBC_STRSIGNAL=y CONFIG_TLS_NELEM=0 CONFIG_TLS_TASK_NELEM=0 CONFIG_TLS_NCLEANUP=0 CONFIG_LIBC_GAISTRERROR_ERRNUM=y CONFIG_LIBC_FTOK_VFS_PATH=/var/ftok
CONFIG_LIBC_MEMFD_ERROR=y CONFIG_LIBC_TEMPBUFFER=y CONFIG_LIBC_MAX_TEMPBUFFER=2 CONFIG_LIBC_TEMPBUFFER_MALLOC=y CONFIG_LIBC_MUTEX_BACKTRACE=0 CONFIG_BUILTIN=y CONFIG_SYMTAB_ORDEREDBYNAME=y CONFIG_STREAM_OUT_BUFFER_SIZE=64 CONFIG_STREAM_HEXDUMP_BUFFER_SIZE=128 CONFIG_STREAM_BASE64_BUFFER_SIZE=128 CONFIG_LIBC_INLINE_QUEUE=y CONFIG_LIBM_TOOLCHAIN=y CONFIG_HAVE_CXX=y CONFIG_HAVE_CXXINITIALIZE=y CONFIG_LIBCXXMINI=y CONFIG_CXX_STANDARD=\gnu++17
CONFIG_BUILTIN_TOOLCHAIN=y CONFIG_COVERAGE_NONE=y CONFIG_COVERAGE_DEFAULT_PREFIX_STRIP=\0
CONFIG_COVERAGE_DEFAULT_PREFIX=/data
CONFIG_PROFILE_NONE=y CONFIG_BENCHMARK_THREAD_METRIC=y CONFIG_BENCHMARK_THREAD_METRIC_PREEMPTIVE_SCHEDULE=y CONFIG_BENCHMARK_THREAD_METRIC_PREEMPTIVE_SCHEDULE_PRIORITY=100 CONFIG_BENCHMARK_THREAD_METRIC_PREEMPTIVE_SCHEDULE_STACKSIZE=2048 CONFIG_BENCHMARK_THREAD_METRIC_PREEMPTIVE_SCHEDULE_PRINTS=y CONFIG_NSH_LIBRARY=y CONFIG_NSH_PROMPT_STRING=\nsh>
CONFIG_NSH_PROMPT_MAX=32 CONFIG_NSH_PROMPT_ENV=\PS1
CONFIG_NSH_PROMPT_SUFFIX=>
CONFIG_NSH_READLINE=y CONFIG_NSH_MAXARGUMENTS=7 CONFIG_NSH_NESTDEPTH=3 CONFIG_NSH_ALIAS=y CONFIG_NSH_ALIAS_MAX_AMOUNT=1 CONFIG_NSH_BUILTIN_APPS=y CONFIG_NSH_DISABLE_DATE=y CONFIG_NSH_DISABLE_LOSMART=y CONFIG_NSH_DISABLE_LOMTD=y CONFIG_NSH_DISABLE_MB=y CONFIG_NSH_DISABLE_MH=y CONFIG_NSH_DISABLE_MW=y CONFIG_NSH_DISABLE_TIMEDATECTL=y CONFIG_NSH_CODECS_BUFSIZE=128 CONFIG_NSH_PROC_MOUNTPOINT=/proc
CONFIG_NSH_FILEIOSIZE=512 CONFIG_NSH_SYSINITSCRIPT=\init.d/rc.sysinit
CONFIG_NSH_INITSCRIPT=\init.d/rcS
CONFIG_NSH_SCRIPT_REDIRECT_PATH=\ CONFIG_NSH_CONSOLE=y CONFIG_NSH_ARCHINIT=y CONFIG_SYSTEM_DD=y CONFIG_SYSTEM_DD_PROGNAME=\dd
CONFIG_SYSTEM_DD_PRIORITY=100 CONFIG_SYSTEM_DD_STACKSIZE=2048 CONFIG_SYSTEM_DD_STATS=y CONFIG_SYSTEM_NSH=y CONFIG_SYSTEM_NSH_PRIORITY=100 CONFIG_SYSTEM_NSH_STACKSIZE=2048 CONFIG_SYSTEM_NSH_PROGNAME=\nsh
CONFIG_SYSTEM_READLINE=y CONFIG_READLINE_HAVE_EXTMATCH=y CONFIG_READLINE_ECHO=y

Host system OS: Ubuntu 22.04.5 LTS Linux D-11128L 6.8.0-79-generic #79~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 15 16:54:53 UTC 2 x86_64 x86_64

Host system PATH: /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/zephyrproject/zephyr/scripts /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/.local/bin /home/buildpc/.local/bin /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin /home/buildpc/.dotnet/tools /home/buildpc/Harish/gcc-arm-none-eabi-10.3-2021.10/bin /home/buildpc/Harish/gcc-arm-none-eabi-10.3-2021.10/bin

Verification

  • [x] I have verified before submitting the report.

keykur111 avatar Sep 30 '25 08:09 keykur111

Can i make this as help instead of bug

keykur111 avatar Oct 07 '25 07:10 keykur111