前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开发者成长激励计划-基于TencentOS Tiny的电子表

开发者成长激励计划-基于TencentOS Tiny的电子表

原创
作者头像
用户8204584
修改2022-08-11 11:43:21
8040
修改2022-08-11 11:43:21
举报

有幸能够参与这次比赛,学到了很多知识,由于时间比较匆忙,赶在结束前几天完成了这个DEMO。这个项目基于TOS的mqtt的例程,通过滴答数计时并显示时间,通过联网校对时间,云端下发指令矫正时间,项目目的主要是完成对TencentOS移植以及腾讯物联网平台的实践。

TencentOS tiny整体架构

1.TencentOS tiny整体架构
1.TencentOS tiny整体架构

开发板简介

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

开发板特性

  • 内置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口,方便开发者扩展硬件模块

2.demo展示
2.demo展示

代码部分

使用TencentOS 创建了三个thread,分别用于LCD显示,计时和传输数据。gitee链接

3.进程结构
3.进程结构

由于屏幕的刷新率感人,而且我也没有找到更加经济的方法来改变展示效果,因此将动态的时钟换成了静态: ) 这里时钟的部分要用TOS内核的sleep或者delay接口,而不是RTC的delay,否则会死循环无法调度。

画时钟使用的是LCD例程中的画线函数,一些三角函数移植了LVGL的三角函数实现,lvgl的实现比较有意思,学到了很多节约资源的方法。

表的指针根据角度计算出来就好了

代码语言:javascript
复制
   //转动秒针
    secondAngle = calendar.sec * 6;    //    2 * pi / 60 =一秒钟走的角度   ti.wSecond  =系统当前秒
    secondEnd_x = center_x + (r * lv_trigo_sin(secondAngle) >> LV_TRIGO_SHIFT);
    secondEnd_y = center_y - (r * lv_trigo_cos(secondAngle) >> LV_TRIGO_SHIFT);
//    printf("secondEnd_x is %u\r\n",secondEnd_x);
//    printf("secondEnd_y is %u\r\n",secondEnd_y);

    LCD_DrawLine(center_x,center_y,secondEnd_x,secondEnd_y,BLUE);

    //转动分钟
    uint16_t minuteAngle = calendar.min * 2 * 3.14 / 60  + secondAngle / 60;
    uint16_t minuteEnd_x = center_x + (72 * lv_trigo_sin(minuteAngle) >> LV_TRIGO_SHIFT);
    uint16_t minuteEnd_y = center_y - (72  * lv_trigo_cos(minuteAngle) >> LV_TRIGO_SHIFT);
    LCD_DrawLine(center_x,center_y,minuteEnd_x,minuteEnd_y,YELLOW);

    //转动时钟
    uint16_t hoursAngle = calendar.hour * 2 * 3.14 / 12 + minuteAngle / 60;
    uint16_t hoursEnd_x = center_x + (45* lv_trigo_sin(hoursAngle)>> LV_TRIGO_SHIFT);
    uint16_t hoursEnd_y = center_y + (45* lv_trigo_cos(hoursAngle)>> LV_TRIGO_SHIFT);
    LCD_DrawLine(center_x,center_y,hoursEnd_x,hoursEnd_y,RED);
代码语言:javascript
复制
//三角函数预先存储90个值(除以32767)
/**********************
 *  STATIC VARIABLES
 **********************/
static const int16_t sin0_90_table[] = {
    0,     572,   1144,  1715,  2286,  2856,  3425,  3993,  4560,  5126,  5690,  6252,  6813,  7371,  7927,  8481,
    9032,  9580,  10126, 10668, 11207, 11743, 12275, 12803, 13328, 13848, 14364, 14876, 15383, 15886, 16383, 16876,
    17364, 17846, 18323, 18794, 19260, 19720, 20173, 20621, 21062, 21497, 21925, 22347, 22762, 23170, 23571, 23964,
    24351, 24730, 25101, 25465, 25821, 26169, 26509, 26841, 27165, 27481, 27788, 28087, 28377, 28659, 28932, 29196,
    29451, 29697, 29934, 30162, 30381, 30591, 30791, 30982, 31163, 31335, 31498, 31650, 31794, 31927, 32051, 32165,
    32269, 32364, 32448, 32523, 32587, 32642, 32687, 32722, 32747, 32762, 32767
};
代码语言:javascript
复制
//每次画对称的8个点
LV_ATTRIBUTE_FAST_MEM int16_t lv_trigo_sin(int16_t angle)
{
    int16_t ret = 0;
    angle       = angle % 360;

    if(angle < 0) angle = 360 + angle;

    if(angle < 90) {
        ret = sin0_90_table[angle];
    }
    else if(angle >= 90 && angle < 180) {
        angle = 180 - angle;
        ret   = sin0_90_table[angle];
    }
    else if(angle >= 180 && angle < 270) {
        angle = angle - 180;
        ret   = -sin0_90_table[angle];
    }
    else {   /*angle >=270*/
        angle = 360 - angle;
        ret   = -sin0_90_table[angle];
    }

    return ret;
}

视频内容

写在最后

感谢腾讯给我这次接触嵌入式开发的机会,感谢腾讯和沁恒的所有技术支持,所有工具(处理跳线)和代码可以直接运行,减少了很多不必要的麻烦,尤其是对于我这种半吊子的软件开发小学生 : )。我有幸尝试了摄像头等大部分例程,也在群里学习到了很多有用的知识。由于一些硬件限制,不太适合直接在板子上进行AI推理部署,因此我改变了原有的想法(TB买的模块明天才到),在比赛结束前的这几天完成了这个DEMO,等明天收到快递后会继续更新。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • TencentOS tiny整体架构
  • 开发板简介
  • 开发板特性
  • 代码部分
  • 写在最后
相关产品与服务
TencentOS Server
TencentOS Server 是腾讯云推出的 Linux 操作系统,它旨在为云上运行的应用程序提供稳定、安全和高性能的执行环境。它可以运行在腾讯云 CVM 全规格实例上,包括黑石物理服务器2.0。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档