AI-K210 开发家庭万用宝模组(1)

手头有个以前开发自动跟随拍的K210器件(视频  https://www.douyin.com/video/6943813162625961252?previous_page=app_code_link )。

闲时无聊,决定用它改造一个万用宝,目标呢家里常用的小设备集成起来,省的家里一堆小东西。

功能:

1. 人脸识别:人脸定位 、 人脸特征点检测、特征点对比;

2. 生理参数检测:血压(个人数据关联分析加速检测速度至10~20秒测量)、心电图(ECG+心率+ST段分析+心律失常分析)、血氧(脉搏氧饱和度+脉率)、胎心率、血糖、体温(红外/热电偶);

3. 其他功能:环境温湿度、红外遥控器、二维码(后续想到啥再补充);

4. 系统:电阻屏 、RTT-OS + LVGL-GUI,TF卡数据存储、wifi数据同步,蓝牙网关。

需求大体如上,下面开始准备基础环境。

#############################################################################

一、搭建K210的基础开发环境

1.1 工具链准备

首先需要下载riscv交叉编译的工具链:https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases/download/v8.3.0-2.3/xpack-riscv-none-embed-gcc-8.3.0-2.3-linux-x64.tar.gz

根据Win、OSX、Linux平台32或64位版本具体选择对应的工具链,(原厂的工具链因libc链接库的问题无法编译RTT),因本人在Ubuntu20.04下开发,下面主要记录Linux下开发的环境。

下载后在工具链目录解压至 /opt目录:【 tar zxvf xpack-riscv-none-embed-gcc-8.3.0-2.3-linux-x64.tar.gz -C /opt/ 】

打开~/.bashrc文件,在文件末尾添加如下一行,将 /opt/kendryte-toolchain/bin 目录添加到PATH环境变量,并更新生效

export PATH=$PATH:/opt/xpack-riscv-none-embed-gcc-8.3.0-2.3/bin
$ source ~/.bashrc 

1.2 下载RT-Thread源码

在开发目录下执行:【 git clone --recursive https://github.com/RT-Thread/rt-thread.git】命令等待下载完成。

1.3 SCONS配置

在下载好的rtt源码下找到k210的bsp,rt-thread/bsp/k210目录下打开rtconfig.py文件:

修改上图18行工具链的位置,屏蔽23、24行防止被RTT_EXEC_PATH替换。

修改上图54行,CXXFLAGS增加对c++17的支持(K210最新的sdk中nncase使用了c++17的语法)

在rt-thread/bsp/k210路径下执行:

$ sudo apt install scons (安装scons)
$ sudo apt install libncurses5-dev libncursesw5-dev(安装menuconfig必要的库)
$ scons --menuconfig

选择RT-Thread Components--> C++ features--> Support C++ features用以支持c++,

RTT全局对象构造函数的实现在 rt-thread\components\cplusplus 目录下的 crt_init.c 文件中,初始化方式如下:

链接脚本文件 rt-thread/bsp/k210/link.lds 为 C++ 全局构造函数的代码分配了段,为了使 C++ 全局对象构造函数链接后存放在指定的段中,需要修改link.lds:

使用该命令后会安装及初始化 Env 工具,并在 home 目录下面生成 “.env” 文件夹,此文件夹为隐藏文件夹,切换到 home 目录,使用 la 命令可查看所有目录和文件。

$ la ~/.env
env.sh  local_pkgs  packages  tools

立即更新 env.sh 配置环境变量

$ source ~/.env/env.sh

使用 pkgs --update 命令下载软件包到 BSP 目录下的 packages 文件夹里

$ pkgs --update  (每次执行pkgs命令前 需保证在执行source ~/.env/env.sh 后的环境)

输入命令code . 启动VSCode,点击TERMINAL。

现在VSCode中的终端就变成了env工具,可以直接在这个终端中进行env的一些操作。这里我们要先输入指令,scons --target=vsc -s。【这条指令能将在env中配置产生的头文件的搜索路径添加到vs code中,每次使用完env中的menuconfig功能后都要记得使用这个指令更新一下配置,否则可能会出现找不到头文件的错误】

1.4 编译下载

在VSCode终端输入:scons 编译RTT,但是发现出错

 这个可能是rtt与工具链的冲突问题,临时解决办法如下:

打开 /opt/xpack-riscv-none-embed-gcc-8.3.0-2.3/riscv-none-embed/include/sys中的signal.h文件,屏蔽掉 union sigval、struct sigevent、以及 typedef struct siginfo_t;

//union sigval {
//  int    sival_int;    /* Integer signal value */
//  void  *sival_ptr;    /* Pointer signal value */
//};

//struct sigevent {
//  int              sigev_notify;               /* Notification type */
//  int              sigev_signo;                /* Signal number */
//  union sigval     sigev_value;                /* Signal value */

#if defined(_POSIX_THREADS)
//  void           (*sigev_notify_function)( union sigval );
                                               /* Notification function */
//  pthread_attr_t  *sigev_notify_attributes;    /* Notification Attributes */
#endif
//};

/* Signal Actions, P1003.1b-1993, p. 64 */
/* si_code values, p. 66 */

#define SI_USER    1    /* Sent by a user. kill(), abort(), etc */
#define SI_QUEUE   2    /* Sent by sigqueue() */
#define SI_TIMER   3    /* Sent by expiration of a timer_settime() timer */
#define SI_ASYNCIO 4    /* Indicates completion of asycnhronous IO */
#define SI_MESGQ   5    /* Indicates arrival of a message at an empty queue */

//typedef struct {
//  int          si_signo;    /* Signal number */
//  int          si_code;     /* Cause of the signal */
//  union sigval si_value;    /* Signal value */
//} siginfo_t;

另外,把 rt-thread/bsp/k210/cconfig.h 中的下面三行注释掉(注意:这个文件是 rt_thread/tools/gcc.py 等生成的,如果想cconfig.h不生成 HAVE_SIGACTION、HAVE_SIGINFO、HAVE_SIGVAL三个宏的话,可以把/opt/xpack-riscv-none-embed-gcc-8.3.0-2.3/riscv-none-embed/include/sys/signal.h中注释的部分删除掉)。

//#define HAVE_SIGACTION 1
//#define HAVE_SIGINFO 1
//#define HAVE_SIGVAL 1

最后在VSCode终端中输入scons,编译成功:

 现在需要烧写到k210里,先安装kflash.py,链接:https://github.com/kendryte/kflash.py,

sudo pip3 install kflash

sudo usermod -a -G dialout $(whoami)

 至此RTT终于在K210上跑起来了,后续要在上面移植各类应用。欢迎关注交流.......

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值