zephyr 在测试中运行多线程

问题描述 投票:0回答:1

我在 zephyr 中有一个应用程序,它启动多个相互交互的任务。相关任务读取并设置仪表和阀门。这些的虚拟表示都存在。

我现在想向这个项目添加一些测试。其中之一是验证任务是否正在运行并正确反应。

我设法让任务的线程在twister中运行,但与我自己的测试线程不并行。

cmake_minimum_required(VERSION 3.13.1)
set(APP_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..)

list(APPEND ZEPHYR_EXTRA_MODULES ${APP_ROOT}/src/drivers/meter)
list(APPEND ZEPHYR_EXTRA_MODULES ${APP_ROOT}/src/drivers/valve)

list(APPEND SYSCALL_INCLUDE_DIRS ${APP_ROOT}/include/)

find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(MyProject)
zephyr_include_directories(${ZEPHYR_BASE}/include/zephyr/drivers/)

# C sources
target_sources(app PRIVATE src/main.c)
target_sources(app PRIVATE ${APP_ROOT}/src/task/MterTask.c)

任务线程在任务源文件中启动:

K_THREAD_DEFINE(metertask_id, METER_TASK_STACKSIZE, _meter_thread, NULL, NULL, NULL,
        METER_TASK_PRIORITY, K_ESSENTIAL, 0);

由于线程没有并行调整,我必须手动停止测试线程

k_sleep()

然而,这不适用于为我提供任务信息的辅助函数。 例如剩余升数或虚拟仪表的值。

有没有办法让twister并行运行线程?

multithreading zephyr-rtos z-test
1个回答
0
投票

我在这里看到了错误的问题。 在我的测试中,不是给出变量的地址,而是写入值。我实际上给出了一个指向地址 0 的指针。这就是任务卡住并且测试在超时后终止的原因。

所以经典的指针失败了。但 zephyr/twister 也没有提到我的错误。

我仍然需要在一些地方使用

k_sleep
以确保调度程序为任务提供足够的时间。不过,重构任务可以消除这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.