使用nuttx写自启任务

首先从px4学习怎么进行系统任务。px4是通过nsh_main里面调用nsh_consolemain然后调用rcS文件,运用rcS脚本命令启动相应模块。

然而经过了一个礼拜的实践(浪费时间),我发现如果使用这个方式,需要一个文件系统,本来想用flash模拟一个文件系统,但是这个想法在经过两天的碰壁过后,我才发现不是很现实。然后冷静地想了一想,我发现,这种启动方式只有在开启了nsh才有用,可是我希望达到的目的是启动板子,自己就能够运行的系统任务。

换了一个思路后,就顺着启动流程一点点找,最后在os_do_appstart()找到了答案,这个函数是用来调用板载启动任务,启动任务被定义在CONFIG_USER_ENTRYPOINT这个宏定义里。在全局搜索的过程中,我发现,有一个示例的CONFIG_USER_ENTRYPOINT和别的示例的不同。别的都是nsh_main,这个是用来启动nsh的,但是有一个是hello_main。而且这个示例是stm32f103_minimum下的,果断编译尝试,发现果然每次启动的时候都会打印helloworld。

所以我将CONFIG_USER_ENTRYPOINT改为leds_main,然后编译。。。。。。果然没有这么简单。。。。。。还是报错了,挂在了led_daemon: ERROR: Failed to open。。。这里,但是好消息是,任务找到了,而且启动了。是由于之前open的时候,返回了一个负值,所以挂了,其实原因也是比较好猜的,无非就是还没有挂载led这个设备呗。之前肯定有个给板子初始化用的函数,然后我需要在这个函数里面挂载led这个设备就好了。

然后找到leds_main,在最前面加了句board_app_initialize(),然后再次编译运行,然后就发现能够已启动就自己进行闪烁了。

猜你喜欢

转载自blog.csdn.net/qq_21856675/article/details/81914122