首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >初识 Turbopack

初识 Turbopack

作者头像
政采云前端团队
发布于 2023-02-27 08:55:12
发布于 2023-02-27 08:55:12
40700
代码可运行
举报
文章被收录于专栏:采云轩采云轩
运行总次数:0
代码可运行

一、作品简介:

代码语言:txt
AI代码解释
复制
   我们在开发加热不燃烧烟具的过程中,需要吧烟具内部的温度加到一个比较高的温度(200-300摄氏度),烟具内部本身有测温器件,但是不能保证烟具自己测试的温度就是准确的,所以就需要一个外部也要增加设备来辅助测试一下,并且把整个加热过程中的温度变化画出曲线,有助于对整个设备的研究。所以我们这次开发所用的硬件除了赤兔CH32V307开发板以外,还增加一个NTC的检测电路。如下图所示:
开发板加上NTC测温器件
开发板加上NTC测温器件
NTC原理图
NTC原理图

二、软件开发过程

1、软件环境

此次开发和编译坏境是沁恒微的MounRiver Studio软件,此软件用熟了感觉你keil好用太多了,并且还是免费的开发软件。具体如何好,只有真正使用来开发的各位工程师能明白,在此就不多说了。界面如下图所示:

MounRiver Studio开发软件界面
MounRiver Studio开发软件界面

2、基础例程测试:

本次设计的基础例程是本次活动提供的例程“TencentOS_DVP”。此代码已经包含了LCD屏的驱动,摄像头的驱动,以及AT指令以及MQTT协议等功能。只要稍加运用就可以做成一个可以连上腾讯云的网络产品。如下图所示就是本次测试连到腾讯云的日志记录:

腾讯云端日志图
腾讯云端日志图

3、云端开发:

根据学习视频和PPT学习,自己测试了一些简单的测试开发,开发还是比较方便的。只是时间紧,工作忙,没有实际真正开发成产品,等忙完这段时间,过段时间直接在公司立个预研项目直接开发,从此一个单片机工程师转变成一个全能物联网工程师还是有可能的。开发小程序如下图所示:

腾讯云小程序开发界面图
腾讯云小程序开发界面图

4、温度检测程序实现

NTC的温度检测,其原理就是使用热敏电阻的特性,根据厂家给出的热敏电阻对应温度参数,然后设计一个电路,使用电阻分压的情况下读取分压电阻的电压值,从而查表得出测试环境的实际温度值。程序代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "debug.h"
#include "tos_k.h"
#include "lcd.h"
#include "lcd_init.h"
#include "user_read_temperature.h"
#define M_COUNT_OF(Obj)         (sizeof(Obj) / sizeof(Obj[0]))//总长度除以个体长度等于个数

Dev_ADC vDev_ADC;

s16 Calibrattion_Val = 0;
const uint16_t list_N_V[330] =
{
4090,4089,4089,4088,4088,4087,4087,4086,4086,4085,
4085,4084,4083,4083,4082,4081,4080,4080,4079,4078,
4077,4076,4075,4074,4073,4071,4070,4069,4067,4066,
4065,4063,4061,4060,4058,4056,4054,4052,4050,4048,
4046,4044,4041,4039,4036,4034,4031,4028,4025,4022,
4019,4015,4012,4008,4004,4000,3996,3992,3988,3983,
3978,3973,3968,3963,3958,3952,3946,3940,3934,3927,
3921,3914,3907,3899,3892,3884,3876,3868,3859,3850,
3841,3832,3822,3812,3802,3791,3781,3770,3758,3747,
3735,3722,3710,3697,3684,3670,3656,3642,3628,3613,
3598,3582,3566,3550,3534,3517,3500,3482,3464,3446,
3427,3409,3389,3370,3350,3330,3309,3288,3267,3246,
3224,3201,3178,3154,3131,3107,3082,3058,3033,3007,
2982,2956,2930,2904,2877,2851,2824,2797,2770,2742,
2714,2687,2659,2631,2603,2574,2546,2517,2489,2460,
2414,2368,2340,2312,2284,2255,2227,2199,2171,2143,
2115,2087,2059,2031,2004,1976,1949,1922,1895,1868,
1841,1815,1788,1762,1737,1711,1685,1660,1635,1610,
1585,1561,1537,1514,1491,1467,1445,1422,1400,1377,
1355,1334,1312,1291,1270,1249,1229,1209,1189,1169,
1150,1131,1112,1093,1075,1057,1039,1021,1004,987 ,
970 ,954 ,937 ,921 ,905 ,890 ,874 ,859 ,845 ,830 ,
815 ,801 ,787 ,773 ,760 ,747 ,734 ,721 ,709 ,696 ,
684 ,672 ,661 ,649 ,638 ,626 ,616 ,605 ,594 ,584 ,
574 ,564 ,554 ,545 ,535 ,526 ,517 ,508 ,499 ,490 ,
482 ,474 ,465 ,457 ,450 ,442 ,434 ,427 ,420 ,413 ,
405 ,398 ,392 ,385 ,379 ,372 ,366 ,360 ,354 ,348 ,
342 ,336 ,331 ,325 ,320 ,315 ,309 ,304 ,299 ,294 ,
289 ,285 ,280 ,276 ,271 ,267 ,262 ,258 ,254 ,250 ,
245 ,242 ,238 ,234 ,230 ,226 ,223 ,220 ,216 ,213 ,
209 ,206 ,203 ,200 ,197 ,194 ,191 ,188 ,185 ,182 ,
179 ,176 ,174 ,171 ,168 ,166 ,163 ,161 ,159 ,156 ,
153 ,151 ,149 ,147 ,145 ,143 ,140 ,138 ,136 ,135 ,
};
int uGetHeaterTemperature(uint8_t ch)//NTC测温
{
    int data_len,x=0;
    static uint16_t Adcn;
    data_len=M_COUNT_OF(list_N_V);
    Adcn = vDev_ADC.Read_ADC[ch];//userADC_var.ADC_uDATA[ch];
    if((Adcn<=list_N_V[0])&&(Adcn>=list_N_V[data_len-1]))
    {
        for(x=0;x<data_len-1;x++)
        {
            if(Adcn>=list_N_V[x])
            {
                break;
            }
        }
    }
    return x;
}
/*********************************************************************
 * @fn      ADC_Function_Init
 *
 * @brief   Initializes ADC collection.
 *
 * @return  none
 */
void ADC_Function_Init(void)
{
    ADC_InitTypeDef ADC_InitStructure={0};
    GPIO_InitTypeDef GPIO_InitStructure={0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );
    RCC_ADCCLKConfig(RCC_PCLK2_Div8);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    ADC_DeInit(ADC1);
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
    ADC_InitStructure.ADC_ScanConvMode = DISABLE;
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfChannel = 1;
    ADC_Init(ADC1, &ADC_InitStructure);

    ADC_DMACmd(ADC1, ENABLE);
    ADC_Cmd(ADC1, ENABLE);

    ADC_BufferCmd(ADC1, DISABLE);   //disable buffe
    ADC_ResetCalibration(ADC1);
    while(ADC_GetResetCalibrationStatus(ADC1));
    ADC_StartCalibration(ADC1);
    while(ADC_GetCalibrationStatus(ADC1));
    Calibrattion_Val = Get_CalibrationValue(ADC1);

    ADC_BufferCmd(ADC1, ENABLE);   //enable buffe
}

/*********************************************************************
 * @fn      Get_ADC_Val
 *
 * @brief   Returns ADCx conversion result data.
 *
 * @param   ch - ADC channel.
 *            ADC_Channel_0 - ADC Channel0 selected.
 *            ADC_Channel_1 - ADC Channel1 selected.
 *            ADC_Channel_2 - ADC Channel2 selected.
 *            ADC_Channel_3 - ADC Channel3 selected.
 *            ADC_Channel_4 - ADC Channel4 selected.
 *            ADC_Channel_5 - ADC Channel5 selected.
 *            ADC_Channel_6 - ADC Channel6 selected.
 *            ADC_Channel_7 - ADC Channel7 selected.
 *            ADC_Channel_8 - ADC Channel8 selected.
 *            ADC_Channel_9 - ADC Channel9 selected.
 *            ADC_Channel_10 - ADC Channel10 selected.
 *            ADC_Channel_11 - ADC Channel11 selected.
 *            ADC_Channel_12 - ADC Channel12 selected.
 *            ADC_Channel_13 - ADC Channel13 selected.
 *            ADC_Channel_14 - ADC Channel14 selected.
 *            ADC_Channel_15 - ADC Channel15 selected.
 *            ADC_Channel_16 - ADC Channel16 selected.
 *            ADC_Channel_17 - ADC Channel17 selected.
 *
 * @return  none
 */
u16 Get_ADC_Val(u8 ch)
{
    u16 val;

    ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);

    while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
    val = ADC_GetConversionValue(ADC1);

    return val;
}
/*********************************************************************
 * @fn      DMA_Tx_Init
 *
 * @brief   Initializes the DMAy Channelx configuration.
 *
 * @param   DMA_CHx - x can be 1 to 7.
 *          ppadr - Peripheral base address.
 *          memadr - Memory base address.
 *          bufsize - DMA channel buffer size.
 *
 * @return  none
 */
void DMA_Tx_Init( DMA_Channel_TypeDef* DMA_CHx, u32 ppadr, u32 memadr, u16 bufsize)
{
    DMA_InitTypeDef DMA_InitStructure={0};

    RCC_AHBPeriphClockCmd( RCC_AHBPeriph_DMA1, ENABLE );

    DMA_DeInit(DMA_CHx);
    DMA_InitStructure.DMA_PeripheralBaseAddr = ppadr;
    DMA_InitStructure.DMA_MemoryBaseAddr = memadr;
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
    DMA_InitStructure.DMA_BufferSize = bufsize;
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
    DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
    DMA_Init( DMA_CHx, &DMA_InitStructure );
}
/*********************************************************************
 * @fn      Get_ConversionVal
 *
 * @brief   Get Conversion Value.
 *
 * @param   val - Sampling value
 *
 * @return  val+Calibrattion_Val - Conversion Value.
 */
u16 Get_ConversionVal(s16 val)
{
    if((val+Calibrattion_Val)<0) return 0;
    if((Calibrattion_Val+val)>4095||val==4095) return 4095;
    return (val+Calibrattion_Val);
}

void user_Read_ADC(void)
{
    uint8_t temp_D[50];
    u16 ADC_Buf[1],Temperature[2];
    ADC_Function_Init();
    printf("CalibrattionValue:%d\n", Calibrattion_Val);
    while(1)
    {
        ADC_Buf[0] = Get_ADC_Val(ADC_Channel_8);
        //Temperature[1] = TempSensor_Volt_To_Temper(Get_ADC_Val(ADC_Channel_TempSensor));
        vDev_ADC.Read_ADC[0] = Get_ConversionVal(ADC_Buf[0]);
        Temperature[0] = uGetHeaterTemperature(ADC_CH8);
        sprintf(temp_D,"%d     ",Temperature[0] );
        printf("Temperature:%d\r\n", Temperature[0]);
        LCD_ShowString(30,140+16+16+16,"T=:",YELLOW,BLACK,32,0);        
        LCD_ShowString(100,140+16+16+16,temp_D,BRRED,BLACK,32,0);
        tos_task_delay(500);
    }
}

5、测量结果

通过串口示波器软件打印出来分析,与我们设计的温度曲线基本吻合。打印的图如下所示:

6、视频展示测试过程:

三、开发总结

本次开发的TencentOS Tiny系统的最大优势在可以直接使用手上的硬件链接到腾讯云的工作。大大简化了开发的流程和工作量。只是对于之前只是做单片机开发的我来说,还是有难度的。因为之前连腾讯小程序都还没开发成功过。但是通钢这次的学习,发现了使用智能硬件联网并不是特别难的事情。后续将通过更多的学习,把单片机联网来开发。这样才能使自己不落后于这个时代。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 政采云技术 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
下一代前端构建利器——Turbopack
详细官方文档:Building Your Application: Routing | Next.js 13.4 (nextjs.org)
用户11100514
2024/04/28
1.3K0
下一代前端构建利器——Turbopack
取代Webpack的打包工具Turbopack究竟有多快
10 月 25 日,Next.js 13 正式发布。同时,Vercel 还推出并开源了下一代打包工具:Turbopack。Turbopack 是针对 JavaScript 和 TypeScript 优化的增量打包工具,由 Webpack 的创建者 Tobias Koppers 和 Next.js 团队使用 Rust 编写。Turbopack 的推出吸引了众多前端开发者的关注,并且Turbopack具有如下一些优势。
xiangzhihong
2022/11/11
4.9K0
取代Webpack的打包工具Turbopack究竟有多快
学不动了,Vercel 推出比 Vite 快 10 倍的打包器 Turbopack
Vercel 是由 Guillermo Rauch 创立的云服务公司,前身为 Zeit,有 Next.js、Node.js 的 websocket 框架 socket.io 和 MongoDB 客户端 mongoose 等知名开源项目为大众所知。Next.js 为了实现后端渲染,重度使用了 JS 生态中的打包构建工具 webpack。
桃翁
2022/12/18
4K0
学不动了,Vercel 推出比 Vite 快 10 倍的打包器 Turbopack
TurboPack,会是下一个前端构建利器吗?
今天我就介绍下前端中最近出现的一个新的构建工具-TurboPack,这是Next.js团队新推出的面向前端开发的新的构建工具.
御剑
2022/11/18
1.5K0
前端打包、编译和优化
目前前端世界主流的前 3 名模块打包器仍然是 Webpack 、 Rollup 和 Esbuild 。
码之有理
2023/03/06
2.3K0
比 Vite 快 10 倍的 Turbopack!?Webpack 的继承者。
Vercel 的使命是提供代码创造者在灵感迸发瞬间所需的速度和可靠性。去年,我们专注于提升 Next.js 打包 App 的速度。
ssh_晨曦时梦见兮
2022/11/07
7350
比 Vite 快 10 倍的 Turbopack!?Webpack 的继承者。
尤雨溪回应:Vite 真的比 Turbopack 慢 10 倍吗?
一周前,Vercel 宣布了 Webpack 的基于 Rust 的继任者 Turbopack。
ssh_晨曦时梦见兮
2022/11/14
1.1K0
尤雨溪回应:Vite 真的比 Turbopack 慢 10 倍吗?
turbopack ,webpack的官方继任者,快700倍
Turbopack 是针对 JavaScript 和 TypeScript 优化的增量打包器,由 Vercel 的 Webpack 和 Next.js 的创建者用 Rust 编写。
爱吃大橘
2022/12/27
1.3K0
turbopack ,webpack的官方继任者,快700倍
前端食堂技术周刊第 57 期:Turbopack、Next.js13、Chrome107、Vite3.2、图解 TLS 1.3
Vercel 发布 Turbopack,目前处于 alpha 阶段。Turbopack 由 Webpack 作者 Tobias Koppers[3] 亲自操刀,用 Rust 编写,作者的愿景是替代 Webpack 95% 的功能和扩展性。
童欧巴
2023/01/08
1.1K0
前端食堂技术周刊第 57 期:Turbopack、Next.js13、Chrome107、Vite3.2、图解 TLS 1.3
在Vite中接入现代化的CSS 工程化方案
对初学者来说,谈到开发前端的样式,首先想到的便是直接写原生 CSS。但时间一长,难免会发现原生 CSS 开发的各种问题。那么,如果我们不用任何 CSS 工程方案,又会出现哪些问题呢?
江拥羡橙
2023/11/12
1.8K0
在Vite中接入现代化的CSS 工程化方案
前端又开撕了:用Rust写的Turbopack,比Vite快10倍?
10 月 26 日,Vercel 公司正式宣布推出新的打包工具 Turbopack。Vercel 声称这是 Webpack 的继任者,用 Rust 编写,在大型应用中,展示出了 10 倍于 Vite、700 倍于 Webpack 的速度。对此,Vite 的维护者提出了质疑。
深度学习与Python
2022/11/28
1.1K0
前端又开撕了:用Rust写的Turbopack,比Vite快10倍?
基于 Rust 编写的 Turbopack 比 Webpack 快 700 倍,竟然比 Vite 还要快!
10 月 26 日,Vercel 公司正式宣布推出新的打包工具 Turbopack。Webpack 创建者 Tobias Koppers 于 2021 年 4 月加入该公司,牵头了该项目。
前端达人
2022/11/25
9090
基于 Rust 编写的 Turbopack 比 Webpack 快 700 倍,竟然比  Vite 还要快!
Webpack 创始人推出比 Webpack“快 700 倍”的 Turbopack,基于 Rust 编写
作者 | Tina 10 月 26 日,Vercel 公司正式宣布推出新的打包工具 Turbopack。Webpack 创建者 Tobias Koppers 于 2021 年 4 月加入该公司,牵头了该项目。 Turbopack 是 Vercel 公司之前一些工作的延续。在此之前,他们用基于 Rust 的 SWC 替换基于 JavaScript 的转译器 Babel,速度提升了 17 倍。他们还替换了 Terser,压缩的速度提高了 6 倍,从而减少了加载时间和带宽的使用。 “Webpack 已被下载超过
深度学习与Python
2023/03/29
5590
Webpack 创始人推出比 Webpack“快 700 倍”的 Turbopack,基于 Rust 编写
尤雨溪回应:Vite 真的比 Turbopack 慢 10 倍?
一周前,Vercel 宣布了 Webpack 的基于 Rust 的继任者 Turbopack。
ConardLi
2023/01/09
1.4K0
尤雨溪回应:Vite 真的比 Turbopack 慢 10 倍?
Vite 4.3正式发布,性能提升,为应对Rust写的Turbopack?
编译 | 丁晓昀,核子可乐 性能改进 在本次小版本迭代中,我们专注于提高开发服务器的性能。解析逻辑得到简化,热路径性能升级,缓存在查找 package.json、TS 配置文件和经过解析的 URL 时也更加智能。 感兴趣的朋友可以参考这篇博文,了解 Vite 贡献者们如何让 Vite 4.3 实现速度飞跃(https://sun0day.github.io/blog/vite/why-vite4_3-is-faster.html)。 与 Vite 4.2 相比,这个冲刺版本实现了全面的速度跃迁。 下面
深度学习与Python
2023/04/30
6060
Vite 4.3正式发布,性能提升,为应对Rust写的Turbopack?
一个比Webpack快700倍比 Vite 还快 10 倍打包工具
作为一名前端切图崽,相信大家都对打包工具不陌生,大众熟识的Webpack,Gulp,Rollup,Vite,还有这几天闹得沸沸扬扬的 Turbopack
程序员老鱼
2022/12/02
1K0
渐进式 Unbundled 开发工具探索之路
业界主流的开发工具还是以 Webpack 为主,随着项目体积增大,开发阶段一次性将源代码和第三方依赖编译处理打包到一起的耗时会显著增加。在我们团队内部的 monorepo 仓库中,应用项目开发时,为了开发阶段调试方便,通常也会对一些公共库源码一起打包编译,成千上万个模块导致首次 dev server 启动耗时在几分钟甚至十几分钟,严重影响了开发效率与体验。
winty
2021/07/01
1.5K0
渐进式 Unbundled 开发工具探索之路
Turbopack似乎并没有那么牛
这几天前端圈子有一个比较火的基建工具Turbopack,官方文档号称比vite快10倍,比webpack快700倍。今天正好有空,把官方提供的demo浅玩了一下,发现它并没有那么神。
神奇的程序员
2023/01/09
8250
Turbopack似乎并没有那么牛
前端构建效率优化之路
我们的系统(一个 ToB 的 Web 单页应用)前端单页应用经过多年的迭代,目前已经累积有大几十万行的业务代码,30+ 路由模块,整体的代码量和复杂度还是比较高的。
Sb_Coco
2022/09/19
1.3K0
前端构建效率优化之路
Vite2+React+TypeScript:搭建企业级轻量框架实践
Hello大家好,前段时间写了个Vue3的工程项目用起来还不错,其实老早前就想把它移植过来React这边,奈何工作比较忙一直拖到现在,才陆陆续续把杂七杂八的模块补充好。
南山种子外卖跑手
2022/03/31
2K0
Vite2+React+TypeScript:搭建企业级轻量框架实践
推荐阅读
相关推荐
下一代前端构建利器——Turbopack
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
加入讨论
的问答专区 >
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档