开发者成长激励计划-基于TencentOS Tiny的应用开发测试平台

2022-08-11 12:06:13 浏览数 (2)

有幸能够参与这次比赛,学到了很多知识,在这个过程中不断学习TencentOS,并且成功完成了hello world的运行。

由于忘记

TencentOS tiny整体架构

RTOS的多任务设计

开发板简介

CH32V_EVB是腾讯物联网操作系统TencentOS tiny 团队联合沁恒微电子设计的一款物联网评估板,用于TencentOS tiny 基础内核、RISC-V IP核架构和IoT组件功能体验和评估。

单片机最小系统或者叫最小硬件单元电路,指用最少元器件组成的单片机可以正常工作的系统。最小系统基本由电源、单片机、晶振、按键复位电路、用户LED等接口组成,电源使用3.3V直接供电,其他部分原理图如下:

沁恒微电子简介

沁恒微电子股份有限公司成立于2004年,是一家通讯接口芯片和全栈MCU芯片公司。沁恒专注于连接技术和MCU内核研究,基于自研收发器PHY和处理器IP的全栈研发模式,取代传统的外购IP整合模式,提供以太网、蓝牙无线、USB和PCI类等接口芯片,及集成上述接口的连接型/互联型/无线型全栈MCU 单片机。

开发板特性

  • 内置TencentOS Tiny开源物联网操作系统
  • 开发板采用沁恒RISC-V MCU CH32V307VCT6芯片,CH32V305/7系列是基于沁恒自研RISC-V架构微处理器青稞V4系列设计的32位工业级互联型微控制器,配备了硬件堆栈区、快速中断入口,在标准RISC-V基础上大大提高了中断响应速度。加入单精度浮点指令集,扩充堆栈区,具有更高的运算性能。扩展串口UART数量到8组,定时器到10组,其中4组高级定时器。提供USB2.0高速接口(480Mbps)并内置了PHY收发器,以太网MAC升级到千兆并集成了10M-PHY模块。
  • 64KB SRAM,256KB Flash
  • 板载Type-C接口WCH-LINK仿真器
  • 板载esp8266 WiFi模组,支持腾讯云固件
  • 板载以太网接口
  • 板载物联网俱乐部WAN Interface接口,可支持NB-IoT、WiFi、4G cat1、LoRa等模组
  • 板载物联网俱乐部E53 Interface接口,可扩展全系E53传感器以及音频模块;
  • 板载标准24P DVP摄像头接口,可支持最高500万像素摄像头;
  • 板载1.54寸 IPS高清显示屏,支持240*240分辨率;
  • 预留SD卡、用户按键、SPI Flash,
  • 扩展IO口,方便开发者扩展硬件模块

活动介绍

作为全新一代开源精简指令集,RISC-V在AIoT时代备受关注,国内外芯片公司积极布局,RISC-V生态正逐渐起步。TencentOS Tiny(待更名)物联网操作系统也率先支持了RISC-V架构的芯片,提供基于RISC-V的全栈AIoT解决方案。本次开发者成长激励计划是由开放原子开源基金会主办,腾讯TencentOS团队联合国内本土领先MCU芯片公司-南京沁恒微电子等多家单位协办、发起的线上开发者活动,主要面向中小企业嵌入式工程师、RISC-V开发者、物联网爱好者、创客团队等,期待与广大开发者一起共建RISC-V应用生态,基于TencentOS Tiny(待更名)和沁恒RISC-V MCU打造更多新颖、实用、有价值和创造力的IoT应用作品。

开发平台以及代码部分

代码语言:javascript复制
#include <stdio.h>
#include <reg51.h>

void initUart(void) //串行通信函数
{
    SCON = 0x50;
    TMOD = 0x21;
    PCON = 0x00;
    TH1 = 0xfd; 
    TL1 = 0xfd;
    TI = 1;
    TR1 = 1;

}

int SPrintf(const char *fmt, ...)
{
    const char *s;
        u8 *Buf;
    u16 d;
        float f;
    u8 tbuf[16];
        u8 i=0;
    va_list ap;
    va_start(ap, fmt);
        Buf=ShowBuf;
    while (*fmt)
        {
                for(i=0; i<sizeof(tbuf); i  )
                tbuf[i]=0;
        if (*fmt != '%')
                {
            *Buf  =*fmt  ;
            continue;
        }
        switch (*  fmt) {
                        //字符串
            case 's':
                s = va_arg(ap, const char *);
                                if (s == NULL) {break;}
                for ( ; *s; s  ) {
                    *Buf  =*s;
                }
                break;
                        //十进制
            case 'd':
                d = va_arg(ap, int);
                sprintf(tbuf, "%d",d);
                for (i=0; tbuf[i]!='';i  ) {
                    *Buf  =tbuf[i];
                }
                break;

                   //十六进制
           case 'x':
                d = va_arg(ap, int);
                sprintf(tbuf, "%x",d);
                for (i=0; tbuf[i]!='';i  ) {
                    *Buf  =tbuf[i];
                }
                break;
           case 'f':
                f = va_arg(ap, double);
                sprintf(tbuf, "%f",f);
                for (i=0; tbuf[i]!='';i  ) {
                    *Buf  =tbuf[i];
                }
                break;
            // Add other specifiers here...              
            default:  
                *Buf  =*fmt  ;
                break;
        }
        fmt  ;
    }
        *Buf='';
    va_end(ap);
         LCD_Show_c_String(ShowBuf);
    return 1;   // Dummy return value
}

int main() {
    int a[10] = { 72, 101, 108, 108, 111, 87, 111, 114, 108, 100 };
    for (int i = 0; i < 10; i  ) {
        if (!(i - 5))
            SPrintf(" ");
        SPrintf("%c", a[i]);
    }
    SPrintf("n");
    while (1) {}
}
更多详细代码,可以查看github仓库

写在最后

感谢腾讯给我这次接触嵌入式开发的机会,感谢腾讯和沁恒的所有技术支持。我有幸尝试了大部分例程,也在群里学习到了很多有用的知识。在实际中还是很有用的。本次开发就到这里了。

本文可能部分内容有错漏,如无法执行麻请忽略。

0 人点赞