linux cpu占用率如何看
274
2022-11-09
索尼Spresense拆箱与Spresense SDK运行测试
期盼了许久,终于收到了两个包裹,一个是主板,另一个为扩展板。
信息表主要包含法律术语,规范以及Spresense支持网站的链接和QR代码。
扩展板附带了类似的信息表,以及用于将主板固定到位的四个塑料钻头。
两块板的组装都很简单,只需将四个黑色塑料钻头插入扩展板的安装孔中,将主板放在顶部,然后将其向下推。
如Spresense软件文档中所述,有两种方法可以使用Spresense板:
Spresense Arduino库- 使用许多开发人员熟悉的Arduino IDE。
Spresense SDK- 索尼最初的CXD5602芯片组开发环境,基于NuttX实时操作系统,并利用GNU Make工具链。低级API使开发人员能够优化内存使用,节省电源,控制多核处理等等,而Arduino库可能无法实现这一点。
下文针对Spresense SDK软件系统进行说明。
▲Spresense SDK的结构
让我们试着跟着说明指南在运行Ubuntu 18.04的笔记本电脑上调试运行它。
安装Spresense SDK
下一步是从nuttx-tools安装kconfig-frontends包:
查看SDK源代码:
USB连接
将当前用户添加到拨出组,然后注销以确保可以访问串行端口:
1 | sudo usermod -a -G dialout $USER |
是时候通过USB将主板连接到计算机了,这是内核日志的输出:
Spresense SDK安装程序
首先设置初始NuttX内核配置:
1 2 | cd spresense/sdk tools/config.py --kernel release |
然后设置初始SDK配置:
1 | tools/config.py examples/hello |
输出:
1 2 3 4 | cd tools mv ~/Downloads/spresense-binaries-v1.1.0.zip . ./flash.sh -e spresense-binaries-v1.1.0.zip sudo ./flash.sh -l ../../firmware/spresense/ -c/dev/ttyUSB0 |
命令输出:
构建示例映像:
1 2 3 | cd .. make buildkernel -j8 make -j8 |
最终在当前目录中使用nuttx.spk固件:
1 2 | ls nuttx.spk-l -rw-r--r-- 1 jaufranc jaufranc 153776 ม.ค. 5 16:11nuttx.spk |
刷新并运行固件
此时,系统要求刷新引导加载程序,但这项命令已经在上面完成了,所以我们可以刷flashtx.spk:
1 | sudo tools/flash.sh -c /dev/ttyUSB0 nuttx.spk |
命令输出:
1 2 3 4 5 6 7 8 9 10 | >>> Install files ... install -b 115200 Install nuttx.spk Waiting for XMODEM (CRC or 1K) transfer. Ctrl-X to cancel. .........................................................................................................................................................153776bytes loaded. Package validation is OK. Saving package to "nuttx" updater# sync updater# Restarting the board ... reboot |
运行hello world程序需要使用minicom或其他工具连接115200 8N1参数的串口:
1 | minicom -D /dev/ttyUSB0 -b 115200 -s |
在串行端口设置中禁用硬件流控制,然后按Esc并选择Exit退出。我们现在应该可以访问NuttX的NuttShell(NSH)shell。
键入hello以运行演示程序:
1 2 3 4 | NuttShell (NSH)NuttX-7.22 nsh> hello Hello,World!! nsh> |
成功,hello world程序的源代码可以在examples / hello / hello_main.c中找到,是典型的C语的hello world程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | **************************************************************************** * Included Files ****************************************************************************/ #include #include /**************************************************************************** * Public Functions ****************************************************************************/ /**************************************************************************** * hello_main ****************************************************************************/ #ifdef CONFIG_BUILD_KERNEL int main(int argc, FAR char *argv[]) #else int hello_main(int argc, char *argv[]) #endif { printf("Hello, World!!"); return 0; } |
作为参考,NuttX shell有一些类似于busybox中的命令:
1 2 3 4 5 6 7 8 9 10 11 12 | nsh> help help usage:help [-v] [ [ datehelpmksmartfs rmuname ? ddhexdump mhrmdir umount basenamedfkillmount set unset break echolsmvshusleep cat printfmbmwshutdownxd cdexecmkdir poweroffsleep cpexitmkfatfs pstest cmp false mkfifopwd time dirname freemkrdreboottrue |
Spresense中的示例项目
Hello World是开始运行很好的示例程序,但Spresense SDK还有其他更有趣的样本:
每一个示例程序都都在Spresense NuttX的开发指南中详细地描述,但并未描述是何种类型或者是否新颖的样本。
Spresense音频播放器
构建和刷新过程与hello world程序相同,并在sdk目录中执行以下命令:
1 2 3 | ./tools/config.py examples/audio_player make -j8 sudo tools/flash.sh -c /dev/ttyUSB0 nuttx.spk |
该程序被加载到主板上,但我们需要一些额外的文件存储在micro SD卡中,其中包含音乐,播放列表和“worker”二进制文件,如audio_player示例目录中的README.txt文件所述:
在选项指定的路径中存储工作二进制文件,播放列表和播放内容。
- 默认路径
worker二进制文件:/ mnt / sd0 / BIN
播放列表:/ mnt / sd0 / PLAYLIST内容:/ mnt / sd0 / AUDIO
作为播放列表的示例,PLAYLIST文件夹中有TRACK_DB.CSV。另外,作为内容示例,AUDIO文件夹中有Sound.mp3。Sound.mp3的采样频率为48000,位长16,编解码器MP3文件。
起初出现这些提示时,还存在困惑,但最终明白后将文件复制到用FAT32格式化的4GB micro SD卡:
1 2 3 4 5 6 | cp ../examples/audio_player/AUDIO cp ../examples/audio_player/PLAYLIST/ mkdir pushd modules/audio/dsp cp MP3DEC WAVDEC popd |
现在将microSD卡插入Spresense板,并连接扬声器,然后在NuttShell中启动应用程序。
1 2 3 4 5 | NuttShell (NSH)NuttX-7.22 nsh> player Start AudioPlayer example Running time is 10sec Running time is 10 sec |
一切似乎按预期工作,但听不到任何音频。检查音频插孔连接是否接触不良,扬声器的功率和音量水平,但仍然没有声音。后来设想也许Spresense主板和扩展板之间可能存在不良接触,所以按下了主板最终成功了!终于可以听到Sound.mp3文件发出的哔声,有趣的是,微型SD卡确实有效,但不是音频。
GNSS样本
让试一试GNSS示例程序:
1 2 3 | ./tools/config.py examples/gnss make -j8 sudo tools/flash.sh -c /dev/ttyUSB0 nuttx.spk |
顺便说一下记得在运行flash.sh前退出minicom,否则会得到以下错误:
另外还需要注意使用将menuconfig引入安装选项的选项来运行config.py。
1 | ./tools/config.py -m examples/gnss |
继续进行GPS测试,我试图将电路板靠近窗户,但我所处的建筑结构并不容易接收GPS信号,在1小时30分之后,我只获得了UTC时间。所以我搬到了户外,重新启动了电路板,一切都很顺利,我在24秒后获得了UTC时间:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | NuttShell (NSH) NuttX-7.22 nsh> nsh> nsh> gnss Hello, GNSS(USE_SIGNAL) SAMPLE!! start GNSS OK >Hour:0, minute:0, sec:3, usec:497 >No Positioning Data >Hour:0, minute:0, sec:4, usec:512 >No Positioning Data >Hour:0, minute:0, sec:5,usec:15289 ... >No Positioning Data >Hour:0, minute:0, sec:23, usec:507 >No Positioning Data >Hour:0, minute:0, sec:24, usec:522 >No Positioning Data >Hour:6, minute:59, sec:32, usec:554 >No Positioning Data >Hour:6, minute:59, sec:33, usec:561 >No Positioning Data |
并在1分40秒后定位数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 | >Hour:7, minute:0, sec:47,usec:559 >No Positioning Data >Hour:7, minute:0, sec:48,usec:533 >No Positioning Data >Hour:7, minute:0, sec:49,usec:533 >No Positioning Data >Hour:7, minute:0, sec:49,usec:769162 >LAT37.02.1428 >LNG95.36.5893 >Hour:7, minute:0, sec:50,usec:578 >LAT37.02.1428 >LNG95.36.5893 >Hour:7, minute:0, sec:51, usec:574 |
样本代码太长,无法在本次审核中详细介绍,但您可以在examples目录中找到源代码,Spresense SDK文档看起来结构清晰,非常详细和透彻。
总结
我不得不承认Spresense主板上进行的一切评测都很顺利,开发的文档看起来很棒。但对于大多数项目,可能需要附加板,因为在没有任何类型的无线或有线连接的情况下,必须有许多需要GNSS和音频的应用。
索尼Spresense主板在Framos US上售价65美元,也可以在45美元左右找到扩展板,很快就会有一个500万像素的摄像头板将在本月晚些时候推出。Spresense相机售价在计算增值税后29欧元,传感器和蓝牙附加板由ROHM制造,可以单独购买,但目前只在日本购买。希望他们能够找到一种更简单的订购方法,可能在不久的将来使用完整的开发套件。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~