我在 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并行运行线程?
我在这里看到了错误的问题。 在我的测试中,不是给出变量的地址,而是写入值。我实际上给出了一个指向地址 0 的指针。这就是任务卡住并且测试在超时后终止的原因。
所以经典的指针失败了。但 zephyr/twister 也没有提到我的错误。
我仍然需要在一些地方使用
k_sleep
以确保调度程序为任务提供足够的时间。不过,重构任务可以消除这个问题。