RTOS开发环境使用指南


1. 系统概述

Pcupid使用的是FreeRTOS。FreeRTOS是一个开源的实时操作系统(Real-Time Operating System),与通用操作系统(如Windows、Linux)不同,RTOS专注于满足实时性要求,能够按照严格的时间要求来响应事件和处理任务。根据官网介绍,“FreeRTOS 是一款市场领先的嵌入式系统 RTOS,支持 40 多种处理器架构,内存占用小、执行时间快,并具有尖端的 RTOS 功能和库,包括对称多处理 (SMP)、支持 IPv6 的线程安全 TCP 堆栈以及与云服务的无缝集成。它是开源的,并得到积极的支持和维护。”

2. 代码编译

2.1. 配置工具链

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
export PATH=/tools/toolchain/gcc-sigmastar-9.1.0-2019.11-x86_64_arm-eabi/bin:/tools/toolchain/gcc-10.2.1-20210303-sigmastar-glibc-x86_64_arm-linux-gnueabihf/bin:$PATH

2.2. 编译代码

根据Flash_Type选择对应的config

cd project
make aiot-purertos_pcupid.spinand.glibc-10.2.1-ssm001c.128.qfn128_ddr3_defconfig
make clean; make image -j16

2.3. 镜像烧录

使用ISP Tool 烧录前,请注意将串口断开连接,否则会出现verify fail 的错误。

2.3.1. nor flash 烧录

img

2.3.2. nand flash 烧录

img

2.3.3. estar升级

首先运行tftpd 软件,设置image路径

img

SP Tool烧写完成后进入到uboot,使用estar 烧写整个image

初始化网络

estart

设置板子ip和服务器ip

set -f ipaddr xxx.xxx.xxx.xxx
set -f serverip xxx.xxx.xxx.xxx

执行estar脚本

estar

3. 使用说明

3.1.目录介绍

RTOS相关源码在\alkaid\rtos\proj目录下,

/alkaid/rtos/proj$ tree -L 1
.
├── add-config.mk
├── build
├── clear-config.mk
├── config.mak
├── gen_common_cfg.sh
├── gen_ext_cfg.sh
├── hdrs
├── Kconfig
├── libs
├── mak
├── Makefile
├── save_config.sh
├── sc
├── scatter
├── sc_priv
├── scripts
├── tng
└── tools

目录说明:

  • 目录mak,存放编译的配置文件,其中要编译的项目文件就存放在mak/defconfigs目录下

  • 目录libs/product,是sdk的库文件目录,所有以library形式release的库,都在这个目录下

  • 目录sc,是sdk中以源代码形式release的库和app所在的目录,其中application下的是demo程序,而driver目录下的是驱动

  • 目录scatter,是link script所在目录

  • 目录tools,是存放需要用到的tools的目录

3.2. 应用介绍

应用的相关源码在\alkaid\rtos\proj\sc\application\pipeline_demo\目录下

/alkaid/rtos/proj/sc/application/pipeline_demo$ tree -L 1
.
├── application_selector
├── common
├── disp_app
├── dualos_camera
├── dualos_pipeline
├── font
├── iqserver
├── Kconfig
├── lvgl
├── RtosPipelineDemo.mak
└── usb_gadget_app

各应用目录下一般会包含inc/pub/src目录,

  • 目录inc,存放的是模块(module)内部的头文件,不被其他模块使用的头文件

  • 目录pub,存放的是会被其他模块使用的头文件

  • 目录src,则是模块的源代码文件

  • 函数rtos_application_initcall(),用来指定application模块的入口函数,第一个参数是函数名,第二个参数用于设置模块入口函数的执行顺序,一般都配置为0,当存在多个application模块时,可以通过配置参数0,1,2,3来决定application函数的执行顺序,数字越小会越早得到执行

3.3. 应用运行

RTOS提供了用户命令行操作,用户可以通过命令行测试或观察系统运行状态。在串口下输入"help",

img

以tinypcm命令为例,

SS-RTOS # tinypcm
[aio_cli:550] [AIO] tokenCount 0
[aio_cli:554] tinypcm usage:
 -C capture
 -P playback
 -F define fileName
 -D card number: 0,1,2
 -c channels: 1,2,4,6,8
 -f format: 0(16bit), 1(24bit), 2(32bit)
 -r sample rate:8000/16000/32000/48000
 -aoch attach interface:0(DAC_AB), 2(I2S_A), 3(I2S_B), 4(ECHO), 6(I2S_C)
 -ch01 attach interface:1(ADC_AB), 2(ADC_CD), 3(DMIC_A_01), 4(DMIC_A_23), 5(I2S_A_01)
                        6(I2S_A_23), 7(I2S_A_45), 8(I2S_A_67), 13(I2S_B_01), 21(I2S_C_01)
                        37(ECHO), 39(DMIC_A_45), 40(DMIC_A_67), 41(SPDIF_A_01)
tinypcm

SS-RTOS #

录音命令:tinypcm -C -F /misc/test.wav -r 48000 -ch01 3

播放命令:tinypcm -P -F /misc/test.wav -aoch 0