1 nRF的设计工程启动和结构组成
如上一帖一次打开工程展现VS code界面,这次没有打开项目的界面
选择open folder打开项目然后切换到nRF的界面,如下
2 切换到开发环境并对比
首先尝试直接进入windows的命令行界面,如下cmd命令输入
启动的命令行页面直接输入west,显然没有这个东东,那么神马是west呢?
且慢,这里没有并不等于真没有。这里就解释了问什么要从tool chain manager界面进入VS code了,在Open VScode的右侧有小标签,分别点击bash和cmd界面,这里再输入west,就显示该命令被激活了。那么这个就是nRF command line的命令环境,是用west为核心命令,执行编译,下载和调试功能的。而vs Code也是基于该环境,不过是GUI界面,
3 工程框架分析
可以进入这个blinky源码界面,然后从下到上,首先,这个是展开工程中的开发板配置情况,包括了哪些开发板的资源,如GPIO和哪个内核
打开cmak的配置界面,这个nRF是基于cMake的,而且是自己安装全套的,不用系统的cMake,所以,如果系统要求安装,你直接无视
一共三个配置文件,这个是工程配置,这里只用了GPIO
然后是内核的配置,
这个是zephyr的配置,内核的RTOS,而前面测试的west就是zephyr的开发工具。整个配置文件时kconfig命令完成的,也是nRF的配套配置工具,应该也是用scons这个开发配置命令完成的,看界面是非常的相似。
最后展开应用的结构,可以看到这个框架是由众多底层库支持的,而选择哪些库是由上面的config完成的。注意,这个是经过build之后生成的,所以,用户干预可以是零,如果不满意自动生成的配置,在这里直接修改,也是可以的,不过二进制文件不跟着改楼。
最后,才是我们的代码,用户代码就简单得很了,目测无需注解。
4 用户代码开发简析
先贴上代码,这个代码也是先定义端口,再确定GPIO的输出方向,然后初始化,在loop循环中,每切换状态就等待1000毫秒
#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>
#define SLEEP_TIME_MS 1000
#define LED0_NODE DT_ALIAS(led0)
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);
int main(void)
{
int ret;
if (!gpio_is_ready_dt(&led)) {
return 0;
}
ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
if (ret < 0) {
return 0;
}
while (1) {
ret = gpio_pin_toggle_dt(&led);
if (ret < 0) {
return 0;
}
k_msleep(SLEEP_TIME_MS);
}
return 0;
}
选择flash,下载代码,这里显示下载的进度
然后就可以显示每隔1000毫秒的亮灯过程了。
5 小结
这个开发的框架是比较清晰的,但是显然环境的配置比较多,虽然是自动配置,但是也需要搞懂才好。