0%

nuttx应用的载入过程

nuttx应用的载入过程(cmake版)

以apps/examples/helloxx这个应用为例
其应用入口为apps/examples/helloxx/helloxx_main.cxx中的
extern "C" int main(int argc, FAR char *argv[])函数
在该目录下CMakeLists.txt中将其添加到nsh的命令中

1
2
3
4
5
6
7
8
9
10
nuttx_add_application(   
NAME
helloxx
STACKSIZE
${CONFIG_DEFAULT_TASK_STACKSIZE}
MODULE
${CONFIG_EXAMPLES_HELLOXX}
SRCS
helloxx_main.cxx)
endif()

在nuttx/cmake/nuttx_add_application.cmake中将创建一个名为apps_helloxx的library

1
2
set(TARGET "apps_${NAME}")
add_library(${TARGET} ${SRCS})

再通过nuttx_add_library_internal将nuttx相关的头文件以及依赖传进来。

修改helloxx_main.cxx中main函数的名字改为helloxx_main

1
2
3
4
5
list(GET SRCS 0 MAIN_SRC)
set_property(
SOURCE ${MAIN_SRC}
APPEND
PROPERTY COMPILE_DEFINITIONS main=${NAME}_main)

将应用的主函数名字、应用名字、PRIORITY、STACKSIZE参数则传入对应的properties中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
set_target_properties(${TARGET} PROPERTIES APP_MAIN ${NAME}_main)
set_target_properties(${TARGET} PROPERTIES APP_NAME ${NAME})

if(PRIORITY)
set_target_properties(${TARGET} PROPERTIES APP_PRIORITY ${PRIORITY})
else()
set_target_properties(${TARGET} PROPERTIES APP_PRIORITY
SCHED_PRIORITY_DEFAULT)
endif()

if(STACKSIZE)
set_target_properties(${TARGET} PROPERTIES APP_STACK ${STACKSIZE})
else()
set_target_properties(${TARGET} PROPERTIES APP_STACK
${CONFIG_DEFAULT_TASK_STACKSIZE})