-
获取MRS最新样例代码文件。华为云MRS服务2.0版本的样例工程下载地址为:huaweicloud-mrs-example。本地已安装IntelliJ IDEA、JDK、Maven等必备软件。配置华为云镜像站中SDK的Maven镜像仓库,可参考华为云开源镜像配置方式。注意如果本地需配置代理上网,在Maven配置文件“settings.xml”的<proxy></proxy>字段中需配置相关代理信息。如下:打开IntelliJ IDEA,选择导入Project,然后导入下载的样例代码组件的pom文件,例如导入HDFS的样例代码工程。等待工程导入及相关jar包依赖下载完成,即可查看相关样例。使用Maven编译下项目,查看项目相关依赖是否下载完成。
-
账号、课程学习相关FAQ:1、学习这个课,要注册两个账号? 华为云账号用户登录华为云(活动报名、打卡、使用物联网平台),华为账号用于学习视频课程。2、华为账号和华为云账号有什么区别,一定要注册两个账号? 可以只注册华为账号,在华为云登录界面,可以选择使用华为账号登录。3、不知道在哪儿看视频,打卡,报名活动? 看群公告。物联网平台(IoTDA设备接入)相关FAQ1、为什么我的平台不能正常使用,各种报错? (1)登录账号后,先去进行实名认证(2)检查下是否欠费(3)控制台区域选择北京四(4)检查下资源空间,没有资源空间的新建一个,有的用默认的即可2、上报数据,下发命令和视频中不一致? 仔细检查下功能定义和插件开发是否完全正确,是否和视频中一致,建议反复观看对比。3、messageID和mid什么区别? messageID标记不同种类的消息,mid标记同一种消息,具体是哪一次下发的,设备回复命令响应时,带上mid,平台根据mid可以判断出具体是对哪一条命令的响应。4、设备如何激活? 在物联网平台中,激活就是将真实设备在平台进行注册后,和平台进行连接或者上报数据。更多请查看https://support.huaweicloud.com/qs-iothub/iot_05_0005.html#section3 5、NB-IoT使用电信物联卡,无法正常接入设备接入平台? 由于电信做了限制,电信卡只能连电信自己的平台,会出现接入设备接入平台失败或执行软固件升级失败等情况。 6、获取账号详细信息时后台出现错误,获取失败? 请确保华为云账号实名认证通过,并且账号不处于欠费状态。7、NB-IoT设备在线离线状态不实时更新? NB-IoT设备,大部分时间处于休眠状态,设备接入平台后,设备在超过49小时未上报数据,平台会将设备置为“离线”状态。建议根据是否获取到设备数据判断是否在线,而不是通过显示的设备状态。 MQTT设备通常处于长连接状态,因此可通过在线离线状态实时判断设备运行情况8、小熊派FAQ链接:https://bbs.huaweicloud.com/forum/thread-18757-1-1.htmlVSCode和IoT Link插件相关FAQQ: 安装完插件后底部没有Home按钮?A: 常见的原因是您使用了Linux/Mac版的VSCode,目前插件还不支持。Q: 安装完插件后底部没有Home按钮?A: 常见的原因是您使用了Linux/Mac版的VSCode,目前插件还不支持。Q: 新建的工程编译失败?A: 检查'用户设置'--'工具链'里的GCC工具目录是否配置正确,如果插件自动下载安装的GCC,路径为C:\Users\用户名\.iotlink\tools\gcc-arm-none-eabi\bin。若此处没有配置,则需要点击提示里的链接下载安装GCC,安装完成后填写GCC目录,一般为 C:\Program Files (x86)\GNU Tools Arm Embedded\9 2019-q4-major\binQ: 工程烧录失败?A: 失败可能的原因较多,可以做如下的尝试:检查开发板和电脑是否正确连接重新插拔USB线检查工程设置--'调试器'中的Adapter是否配置正确,OpenOCD类型的注意检查参数,JLink类型的检查设备名称是否和开发板匹配尝试重新安装STLink驱动Q: VSCode提示检测到#include错误,请更新includePath?A: 该错误为VSCode找不到gcc编译器的头文件,但并不影响实际的编译功能。如果想修复可打开当前工程的.vscode/c_cpp_properties.json,检查配置的includePath是否正确。一个参考的配置如下:"includePath": [ "C:/Program Files (x86)/GNU Tools Arm Embedded/9 2019-q4-major/arm-none-eabi/include", "C:/Program Files (x86)/GNU Tools Arm Embedded/9 2019-q4-major/lib/gcc/arm-none-eabi/9.2.1/include", "${workspaceFolder}/**", "${sdkPath}/**"],1、本次嵌入式开发环境搭建要做什么? 只需要做这两步:(1)下载VSCode(2)VSCode内安装IoT Link插件2、VSCode在哪儿下载? 下载地址:https://code.visualstudio.com/,下载Windows64位Stable版3、编译失败? 检查IoT Link设置中的工具链GCC目录,是否设置到bin路径。 C:\XXX\GNU Tools Arm Embedded\9 2019-q4-major\bin4、VSCode如何设置中文界面? 看这里:https://bbs.huaweicloud.com/blogs/1693425、JLink下载慢? 不需要下载JLink,本次小熊派使用的是STLink,安装IoT Link过程中自动安装STLink,无需其他操作。6、GCC下载不了? 不需要单独下载GCC,安装IoT Link插件会自动安装GCC。7、烧录失败? (1)没有小熊派开发板的,不需要执行烧录操作,只做打卡用不到烧录操作。 (2)检查下调试器配置是否正确。 (3)检查下是否将小熊派开发板用USB链接到电脑上。 (4)重新插拔下USB线。 (5)如果之前安装过STLink驱动,可以试下重装STLink驱动,驱动在帖子附件下载。8、能不能使用之前的IoT Studio? 熟练者可以使用,但不方便根据视频学习,本次课程视频里用的都是VSCode和IoT Link插件,建议用VSCode。9、安装完IoT Link插件,看不到Home? 不支持Linux、Mac,不支持Windows 32位。10、IoT Link插件是否支持Linux? 当前IoT Link插件仅支持windows 64位。
-
某用户:小课呀,最近我又碰到了个问题,这个不是最近要求远程上课吗?以前一直有使用华为云的OBS服务,所以想把制作的视频课程上传到我自个的OBS桶中,但我现在又想到把这些课程引用到网站的课程板块。视频课程的格式没有统一,有没办法把OBS桶里的视频转换的同一格式和分辨率的。此外,还能截取一些视频课程图片。还有,因为观看课程的量可能不会很小,有没办法保障流畅度呀?小课:等等,让我搜索下小课:有了,您可以用华为云视频点播服务(VOD),VOD提供了一个托管功能,可以直接通过VOD来处理OBS桶中的视频课程,此外,VOD自带CDN加速功能,可以把托管的视频课程预热到广泛的CDN节点中,如此,我们的同学就可以直接在最用户最近的CDN节点获取到视频课程。你再把课程播放地址引用到网页中,可以直接使用VOD提供的Web播放器,更便捷,播放体验也是棒棒的哦~!某用户:听起来好像还比较简单,怎么操作?可否指导下?小课:OK,安排~~~操作流程整个操作过程可以分为如下几步,其中配置转码模板或配置工作流您可以根据实际需求选择配置。步骤一:开通VOD在开始使用前,先需要开通VOD,VOD服务提供按需计费和套餐包,在本次场景中,可能会产生流量费、转码费等费用,所以建议在使用前购买套餐包,更优惠~~步骤二:配置转码模板或工作流(可选)转码模板:VOD提供了3个预置的系统转码模板,同时也支持根据实际需求自定义转码模板,支持转码成DASH、HLS和MP4格式。 视频转码模板(system_template_group):内置了常用的视频清晰度流畅、标清、高清、超清、2K、4K六种清晰度,该模板适用于对分辨率、码率、帧率等音视频具体参数不熟悉的用户。 转封装模板(original_template_group):只转换音视频的封装格式,不改变其它参数,支持将FLV和HLS格式转换为MP4格式,将MP3、MP4和FLV格式转换成HLS格式。该模板主要适用于只需改变格式,无分辨率和码率等更改需求的场景。视频自适应转码模板(adaptive_template_group):支持视频画质增强功能,支持编辑具体的分辨率和码率。该模板适用于有修复视频受损图像需求的场景。建议优先使用系统模板,若不满足需求,再具体配置自定义转码模板,具体配置指南请戳此处。工作流:VOD提供了工作流处理功能, 支持流程化地对视频进行转码、转封装、审核、截图、音频提取、剪切等操作。工作流中所有任务并发执行,所以能在一定程度上提高视频处理效率。具体配置指南戳此处。步骤三:配置托管配置增量音视频托管后,被托管的OBS桶中新增文件将被同步到VOD,您可以对桶中的音视频文件进行相关管理操作。将用于存储原始视频文件和处理后的视频文件的OBS桶托管给点播服务。a. 登录视频点播控制台。b. 在左侧导航栏选择“音视频托管 > 桶授权”,显示您当前已创建的OBS桶。c. 在对应的桶右侧,单击“授权”,完成OBS桶授权。授权如果,点播服务才可读写对应桶里的视频文件。存储原始文件的OBS桶和存储视频处理后输出文件的OBS桶都需要完成授权。 在左侧导航栏选择“音视频托管 > 增量托管”。单击“添加配置”,进入创建托管配置页面,配置托管参数。托管桶:存储视频课程的OBS桶,可以选择一个或多个。托管文件类型:视频课程的格式。音视频处理:选择步骤二配置的转码模板或工作流。输出存储位置:选择使用点播服务处理视频后的文件的存储位置。 单击“确定”,完成配置。步骤四:上传视频课程根据原始视频文件存储的位置,选择不同的上传方式,具体如下所示:若原始文件存储在本地,您可以在OBS控制台或者OBS Browser+上传。若原始文件存储在其它云服务厂商,您可以通过对象存储迁移服务将视频文件迁移到华为云OBS桶中。由于在上传视频前,配置了OBS增量托管,所以上传后,视频文件会同步在点播服务控制台显示,转码或经过工作流处理输出的文件也会存储在配置的OBS桶中。温馨提示: 华为云在“华北-北京一”、“华北-北京四”和“华东-上海2”提供了VOD服务,VOD不支持跨区域处理OBS桶中的视频文件,因此建议将视频课程存储在这三个区域的OBS桶中。步骤五:引用到网站原始视频同步到点播服务后,点播服务会为其生成原始视频播放地址。视频若做了转码处理,点播服务会生成转码播放地址。可以通过如下方式获取视频文件的播放地址,然后引用到网站中。 登录视频点播控制台。在左侧导航栏选择“音视频管理”,进入音视频管理页面。勾选需要导出的视频文件,单击“导出”,导出视频文件信息,其中包含原始文件和转码文件的播放地址。在网站中集成web播放器,将导出的播放地址引用到播放器中。【云小课】云视频第1课《如何将一场直播录制到VOD》:https://bbs.huaweicloud.com/forum/thread-34078-1-1.html
-
目前各类应用对业务质量的要求差别主要在帧率,分辨率,E2E总时延的要求。在视频帧级,视频流级和基于视频协议的包级上对网络传输质量,业务质量进行映射分析,通过对影响业务质量的关键指标进行建模,从而得出业务质量的综合评分。ViaSLA监测平台介绍 ViaSLA(Vertical Industry Application Service Level Agreement)监测平台是Xlabs推出的对5G 2B 行业生态解决方案中业务性能评估平台,包括对实时视频的评估和控制业务的评估,通过被合作伙伴集成的方式,对现场实时业务进行监测,并对历史数据进行分析。SLA监测评估平台分为单机版ia和平台版。单机版主要面向单应用性能可视,能满足一线项目的轻量级部署,对现场业务问题进行界定。平台版能满足多应用场景,并能进行运营分析。本次主要介绍ViaSLA监测平台单机版。 比如在云直播上,找出能评估应用质量好坏的ia关键指标有码率,时延,丢包率,丢帧率,从业务层来看,主要有码率和丢帧率,从网络层的KPI指标来看,主要有时延和丢包率。通过ViaSLA监测平台对上述关键指标进行量化直观的呈现,并对系统的可靠性进行分析得出业务质量评分,如下图所示: 而通过建立业务SLA评估模型:基于帧可靠性的直播安全区模型;来预测当前直播是否会出现卡顿和花屏。 上图实时安全区统计曲线中,红线以下为业务安全区,红线以上为业务的非安全区意味着直播业务会出现视频卡顿和花屏。SLA工具套件使用步骤 1、环境准备 一台windowsPC,最好安装有chrome浏览器;Web服务器(Apache,Lighttpd,nginx或者其它) 2、安装及配置 ViaSLA工具套件主要内容分为offlineapp和public两个目录,里面是HTML+JavaScript进行数据处理,轻量渲染和核心业务质量算法代码。首先需要把offlineapp和public放在服务器的根目录下,以lighttpd为例,放在htdocs目录中 合作伙伴需要根据“SLA监测套件接口说明”开发标准格式的数据采集SDK。启动lighttpd服务,并在浏览器中输入http://localhost/offlineapp/view/page/monitor_runtime.html,点击查询。如下图所示主要有E2E编解码时延设置,业务安全区呈现,实时KPI监测,业务质量计算,关键值统计和CDF/PDF数据统计。足够对应用进行多个方面多个维度的分析。点击‘历史数据’进行查询,会对当前任务的历史KPI数据的统计分析呈现。如下图所示ViaSLA工具套件集成方法 该套件由华为Xlabs进行开发和评分算法的维护,将会在https://developer.huaweicloud.com/resource/5gplus.html中‘5G+软件栈’版块上进行发布以及使用集成说明。欢迎大家进行关注。 大家如果对于集成SLA监测套件感兴趣,或者有相关问题和想法的欢迎交流和咨询:华为X Labs实验室,接口人:jiezhiyuan@huawei.com
-
1、下载软件 链接:https://pan.baidu.com/s/1kSgsD-z_fa15Web98bQtCQ 提取码:0asf2、安装软件 请把下载下来的gnumcueclipse解压到任意目录下,即可使用,不需要安装其他任何软件。 双击eclipse目录下eclipse.exe即可运行IDE。3、验证环境配置 1)新建项目LiteOS Eclipse->File->New->C/C++ Project->C Managed Build点击Next,填写Project name, 选择Project type点击Next, 如下图所示配置 要注意修改三个红框的内容点击Next,不更改配置点击Next,不更改配置点击next,确认配置是不是一样,点击Finish完成配置2) 编写代码 在main.cpp中修改main函数,添加打印信息代码int main(int argc, char *argv[]) { // At this stage the system clock should have already been configured // at high speed. // Show the program parameters (passed via semihosting). // Output is via the semihosting output channel. trace_dump_args(argc, argv); // Send a greeting to the trace device (skipped on Release). trace_puts("Hello ARM World!"); // Send a message to the standard output. puts("Standard output message."); // Send a message to the standard error. fprintf(stderr, "Standard error message.\n"); return 0; }3)编译 使用快捷键Ctrl+B 可以编译全部代码,成功结果如下图:4)配置qemu 进行模拟 点击 New Launch Configuration选择如下图所示:点击Next,首先确认LiteOS.elf是否正确加载如果加载不正确,请点击Search Project,选择正确的LiteOS.elf点击Debugger 配置Qemu 目标板 Board name :STM32F429I-Discovery Device name:STM32F429ZI最后点击Finish 完成配置 点击Run按钮进行仿真结果会看到一块板子的画面一闪而过或者会出现防火墙,请点确认就行。 在终端会显示以下信息,说明仿真成功。4、下载LiteOS代码 码云:https://gitee.com/LiteOS/LiteOS Github:https://github.com/LiteOS/LiteOS 5、在LiteOS项目中新建文件夹命名为LiteOS 使用快捷命令Ctrl+N 新建文件夹,选择 C/C++->Floder点击Next,点击LiteOS,在下面输入LiteOS打开LiteOS源码,选择 arch目录和kernel目录 Ctrl+C复制在工程中 点击LiteOS文件夹,Ctrl+V 就复制进来了同样,把源码中targets目录下的STM32F103VET6_NB_GCC/OS_CONFIG文件夹复制进来最后效果如下图:6、配置头文件、源文件 点击LiteOS 工程,使用快捷键Alt+Enter, 打开Properties for LiteOS点击C/C++ General->Paths and Symbols添加下列目录添加源文件,点击 Source Location添加下列文件夹LiteOS/arch LiteOS/kernel排除不需要文件 排除arch目录下的文件以及文件夹排除kernel目录下的文件及文件夹至此添加LiteOS文件完成7、修改代码为了使LiteOS适用STM32F429,需要修改部分代码。1) 修改 ldscripts目录下的 sections.ld 文件添加两行代码:/* 根据target_config.h中给出的memory布局,定义这两个值,用于计算LiteOS可分配内存的起止地址 */ PROVIDE ( _Min_Heap_Size = _Heap_Begin - _ebss ) ; PROVIDE ( _Min_Stack_Size = __Main_Stack_Size ) ;2) 修改LiteOS/OS_CONFIG/ target_config.h 修改包含的头文件 //#include "stm32f1xx.h" 请把这一行修改成 #include "stm32f4xx.h" #include "stm32f4xx.h"修改BOARD_SRAM_SIZE_KB 实际开发板RAM为192KB,请设置比开发板RAM小一点 #define BOARD_SRAM_SIZE_KB 191 3) 修改LiteOS/kernel/include/los_config.h 修改位置在文件的末尾 //extern LITE_OS_SEC_TEXT_INIT int main(void); extern LITE_OS_SEC_TEXT_INIT int main(int argc, char *argv[]);4) 修改src/main.c 包含头文件 #include "los_base.h"修改main函数代码 int main(int argc, char *argv[]) { // At this stage the system clock should have already been configured // at high speed. // Show the program parameters (passed via semihosting). // Output is via the semihosting output channel. trace_dump_args(argc, argv); // Send a greeting to the trace device (skipped on Release). trace_puts("Hello ARM World!"); // Send a message to the standard output. puts("Standard output message."); // Send a message to the standard error. fprintf(stderr, "Standard error message.\n"); trace_printf("System clock: %u Hz\n", SystemCoreClock); if (LOS_OK != LOS_KernelInit()) { return LOS_NOK; } trace_printf("Hello, LiteOS!\n"); LOS_Start(); return 0; }8、编译运行如何编译运行请看上篇文章,本章不再赘述。运行效果如下图所示:输出 Hello LiteOS! 则代表移植成功。
-
3 GPIO摘要:本文主要从GPIO的定义、工作模式、特色、工作场合、以及GD32450i-EVAL开发板的引脚、对应的寄存器以及GPIO的流水灯示例对GPIO加以介绍,希望对你有所帮助。1定义 GPIO(Gennral-purpose input/output)通用型输入输出,即“IO”口、引脚。既然通用也就是说它是芯片上一个干什么都行的引脚。2 GD32450i-EVAL引脚说明 如图1所示GD32450i-EVAL开发板一共有140(16 * 8 + 12)个通用I/O引脚,PA-PI共9 组,其中PA-PH8组中每组有0-15共16个引脚,外加PI0-PI11共12个引脚。图1 GD32450i-EVAL引脚实物图3 GPIO 工作模式 输入、输出(推挽或开漏)、外设备用功能、模拟模式。而且都可以配置为上拉、下拉、或无上拉/下拉。除了模拟模式外,都具备大电流驱动能力。4 功能 GPIO主要功能都是依托于寄存器实现,每个通用I/O端口都可以通过控制寄存器配置为输入、输出、备用功能或模拟方式。当选择备用功能时,引脚通过AF使能来选择,当端口配置为输出时,可以通过GPIO输出模式寄存器配置为推挽或开漏模式。输出端口的最大速度可以通过GPIO输出速度寄存器配置,每个端口可以通过上下拉寄存器配置为浮空、上拉、下拉功能。4.1 主要寄存器 (1)#define GPIO_CTL(gpiox) REG32((gpiox) + 0x00U) 端口控制寄存器 (2)#define GPIO_OMODE(gpiox) REG32((gpiox) + 0x04U) 端口输出模式寄存器 (3)#define GPIO_OSPD(gpiox) REG32((gpiox) + 0x08U) 端口输出速度寄存器 (4)#define GPIO_PUD(gpiox) REG32((gpiox) + 0x0CU) 端口上拉/下拉寄存器 (5)#define GPIO_ISTAT(gpiox) REG32((gpiox) + 0x10U) 端口输入状态寄存器 (6)#define GPIO_OCTL(gpiox) REG32((gpiox) + 0x14U) 端口输出状态寄存器 (7)#define GPIO_BOP(gpiox) REG32((gpiox) + 0x18U) 端口位操作寄存器 (8)#define GPIO_LOCK(gpiox) REG32((gpiox) + 0x1CU) 端口配置锁定寄存器: (9)#define GPIO_AFSEL0(gpiox) REG32((gpiox) + 0x20U) 备用功能选择寄存器0 (10)#define GPIO_AFSEL1(gpiox) REG32((gpiox) + 0x24U) 备用功能选择寄存器1 (11)#define GPIO_BC(gpiox) REG32((gpiox) + 0x28U) 位清除寄存器 (12)#define GPIO_TG(gpiox) REG32((gpiox) + 0x2CU) 端口位翻转寄存器4.2 对应特性 (1)输入/输出方向控制。 (2)施密特触发器输入功能使能控制。 (3)每个引脚都具有弱上拉/下拉功能。 (4)推挽/开漏输出使能控制。 (5)置位/复位输出使能。 (6)输出驱动速度选择。 (7)模拟输入/输出配置。 (8)备用功能输入/输出配置。 (9)端口锁定配置。 (10)单周期输出翻转功能。5 应用场景 (1)上拉、下拉输入:检测外部信号,如按键等。 (2)浮空输入模式:由于输入阻抗较大一般用作标准通信协议的I2C、USART的接收端。 (3)普通推挽输出:输出电平为0和3.3v的场合。 (4)普通开漏输出:电平不匹配的场合,如需输出5V高电平,需要外部添加上拉电阻,电源5V,GPIO设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5V电平。 (5)复用模式:根据对应的复用功能选择。 注意:使用任意一种开漏模式都需要接上拉电阻。6 示例 以流水灯为例,使用GPIO来控制LED灯,GD32450i-EVAL开发板上有三个LED灯,设置间隔200毫秒,循环点亮,然后一起熄灭,循环此过程。 首先初始化LED时钟,之后配置LED的GPIO引脚,配置好引脚之后对LED灯进行点亮、延时、熄灭即可。 void gd_eval_led_init (led_typedef_enum lednum) { // 使能LED时钟 eriph_clock_enable(GPIO_CLK[lednum]); // 设置GPIO模式 gpio_mode_set(GPIO_PORT[lednum], GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN[lednum]); // 设置GPIO输出以及速度 gpio_output_options_set(GPIO_PORT[lednum], GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN[lednum]); // 操作位清除寄存器 GPIO_BC(GPIO_PORT[lednum]) = GPIO_PIN[lednum]; } 实现上述对于LED灯的初始化,之后只需要对LED灯和时钟进行操作即可,灯亮使能位操作寄存器,灯灭使能位清除寄存器即可。 while(1){ gd_eval_led_on(LED1); delay_1ms(200); gd_eval_led_on(LED2); delay_1ms(200); gd_eval_led_on(LED3); delay_1ms(200); gd_eval_led_off(LED1); gd_eval_led_off(LED2); gd_eval_led_off(LED3); delay_1ms(200); } 实验效果如图2所示,具体见附件。图2 流水灯实验效果图 博客链接:https://bbs.huaweicloud.com/blogs/126778 目录主文链接:https://bbs.huaweicloud.com/blogs/124244
-
### 华为Liteos和物联网设备侧sdk移植到stm32F03ZE霸道板子上 ### 啥是LIteos “开源免费”的实时操作系统,集成了 LwM2M、CoAP、mbed TLS、LwIP 全套 IoT 互联协议栈,且在 LwM2M 的基础上,提供了 AgentTiny 模块,用户只需关注自身的应用,而不必关注 LwM2M 实现细节,直接使用 AgentTiny 封装的接口即可简单快速实现与云平台安全可靠的连接。属于国产的实时操作系统(RTOS) ### 基于标准库移植 下载源码,[https://github.com/LiteOS/LiteOS](https://github.com/LiteOS/LiteOS)\ ### 往裸机工程添加 LiteOS 源码 打开 LiteOS 源码文件,可以看见里面有 8 个文件夹,下面先来了解一下主要的文件夹及其子文件夹的作用,然后将 LiteOS 源码的核心文件提取出来,添加到工程根目录下的文件夹中,因为工程只需要有用的源码文件,而不是整个 LiteOS 源码,   ### 添加LiteOS 系统的一些配置文件,含原厂芯片驱动   >将 OS_CONFIG 文件夹下面的一些配置文件拷贝到刚刚提取的 LiteOS 核心文件夹下面,等下在移植工程的时候大家是需要对这个文件夹下的某些文件进行修改,以适配不同的工程配置,并且可以通过修改这个文件夹下的内核配置头文件来裁剪 LiteOS 的功能。 添加 CMSIS的库,可以打开工程在mdk里面添加,也可以新建\Libraries\CMSIS\include,include文件夹从 keil 安装目录下C:\Keil_v5\ARM\Pack\ARM\CMSIS\5.3.0\CMSIS\Include,将其包含进来可以避免其它电脑 在移植过程中没有相关头文件而引起的编译错误  ### 打开工程,添加 LiteOS 核心源码到工程组文件夹 需 要 在 开 发 环 境 里 面 新 建 LiteOS/cmsis 、 LiteOS/kernel 、 LiteOS/arch 和LiteOS/config 四个文件分组,其中 LiteOS/cmsis 用于存放 LiteOS 文件夹下 cmsis 文件夹的内容,LiteOS/kernel 用于存放 LiteOS 文件夹下 kernel 文件夹的内容,LiteOS/arch 用于存放LiteOS 文件夹下 arch 文件夹的内容。而 LiteOS/config 用于存放 LiteOS 文件夹下的OS_CONFIG 文件夹的内容。  ### 指定 LiteOS 头文件的路径  ### 修改liteos/config文件下的target_config.h,修改自己板子对应的头文件  修改LOSCFG_PLATFORM_HWI,如果是YES代表接管中断,否则不被接管 非接管中断版本的 target_config.h 文件就需要在 LiteOS 提供的 demo 中移植过来 , 比 如 : LiteOS\targets\STM32F103RB_NUCLEO\OS_CONFIG,启动文件不变,保留stm32f10_it.c但需要注释 void PendSV_Handler(void)与 SysTick_Handler(void)这两个函数 接管中断版本的target_config.h文件就需要从 LiteOS 官方写的工程文件夹下面拷贝过来的,路径为\LiteOS\targets\ STM32F429IGTx_FIRE\OS_CONFIG  #### 启动文件内容修改(接管中断,非接管不用管) 因为 LiteOS 接管中断版本的中断向量表是由系统管理的,所以裸机的启动文件是要不得的,必须替换掉,  ### 分散加载文件修改(接管中断方式,非接管不用管) 在 LiteOS 中,中断向量表被放在运行内存里,避免影响分配内存,那么就需要将代码分散加载到不同的区域中,华为官方提供的分散加载文件就在每个具体的工程文件目录下,如 : LiteOS \targets\ STM32F429IGTx_FIRE\MDK-ARM 文 件 夹 下 的 STM32F429IGTx-LiteOS.sct 文件。首先将它拷贝到我们自己的工程中去,并且将其名字修改为“Fire-F103-LiteOS.sct”,放在工程的 user 文件夹中,然后在工程中把 “Fire-F103-LiteOS.sct”文件到工程配置中    ### 修改中断相关文件(非接管中断,接管中断不用管) 由于 LiteOS 已经处理好 PendSV 与 SysTick 中断了,就不需要用户自己处理,所以要在中断相关的源文件(stm32fxxx_it.c)中注释(删除)掉 void PendSV_Handler(void)与 SysTick_Handler(void)这两个函数。  ### 更新core_m3.h版本到4.3,复制粘住就可以了 打开keil安装目录,把版本新的cmsis的include替换工程下的cmsis的include,防止你的工程的cmsis的include版本低于4,同时   ### 修改工程配置 在 LiteOS 中,需要 C99 标准的支持,并且忽略相关的警告,选择“target”→ “C/C++”,在“Misc Controls”选项中输入--diag_suppress=1,47,177,186,223,1295,意思是忽略这些编号的警号,  经初步完成工程的移植了,LiteOS 的接管中断比非接管中断方式要麻烦很多,所以推荐在 cortex-m 系列处理器中采用非接管中断方式移植工程, ### 在main文件添加led任务 ``` #include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "stm32f10x.h" #include "los_sys.h" #include "los_task.ph" UINT32 LED_Task_Handle; static UINT32 AppTaskCreate(void); static UINT32 Creat_LED_Task(void); static void LED_Task(void) int main(void) { UINT32 uwRet = LOS_OK; delay_init(); LED_Init(); /* LiteOS Äں˳õʼ»¯ */ uwRet = LOS_KernelInit(); if (uwRet != LOS_OK) { printf("LiteOS ºËÐijõʼ»¯Ê§°Ü£¡Ê§°Ü´úÂë0x%X\n",uwRet); return LOS_NOK; } uwRet = AppTaskCreate(); if (uwRet != LOS_OK) { printf("AppTaskCreate´´½¨ÈÎÎñʧ°Ü£¡Ê§°Ü´úÂë0x%X\n",uwRet); return LOS_NOK; } LOS_Start(); while(1); } //其余见下载附件 ``` ### 运行结果   工程见网盘: ``` 非接管中断: 链接:https://pan.baidu.com/s/1UQ2L6nZfoqFaa3DL2l20TA 提取码:ikrv 复制这段内容后打开百度网盘手机App,操作更方便哦 接管中断: 链接:https://pan.baidu.com/s/1UbFJy7wRztPnQWQhLrjavg 提取码:95pf 复制这段内容后打开百度网盘手机App,操作更方便哦 ```
-
本期获奖用户名单如下:建赟蓝书签chendaiweiecstaticlianzai喧默buyifengxiaode888情殇贼笨_pr0d1gy以上用户将会获得《刷脸背后》书籍一本,请获奖者在7月26日前将联系方式(姓名、电话、电子邮箱、收货地址) 私信给我哈!o(* ̄︶ ̄*)o谢谢如果逾期没有提供收货地址,将视为自动放弃奖励哦~~~华为云社区实践有礼活动开始啦~近年来人脸识别凭借其自然性、便利性、友好性等特点,已经成为了人工智能领域中很火的一项技术, 在实名认证、图像编辑等功能中都有其身影。本实践将介绍如何使用华为云DevCloud基于Gradle工具,完成一个Android人脸识别App开发。本实践为初级实践,主要包含以下知识点 :● Gradle构建的生命周期 ● Gradle功能的目录结构● build.gradle配置文件● Android API:绘图 (android.graphics包)● Android API:人脸检测(Face Detect)操作步骤1.了解Gradle2.执行编译任务3.下载构建包实践提供操作指导,按照指导步骤完成人脸识别应用开发,并按要求将截图发布到本帖子下方,有机会获得《刷脸背后》书籍1本活动时间:2019年6月14日-2019年7月14日活动参与步骤:1. 注册华为云账号,通过实名认证(已有华为云账号可忽略此步)2. 点击实践链接,接收作业,按照操作指导完成实践。3. 实践结束后将结果截图发送至本帖(包含用户名)示例如下: 4. 活动结束后,在所有盖楼的用户中抽取获奖楼层,获奖楼层=总楼层*中奖百分比,中奖百分比为5%、15%、25%、35%、45%、55%、65%、75%、85%、95%。例如:活动结束后总楼层为500,500*5%=25,即第25楼获奖,其他获奖楼层同理可得。如出现小数点,则四舍五入,例如:活动结束后总楼层为530,530*5%=26.5,即第27楼获奖。无效楼层不参与中奖,做顺延处理,例如:抽取获奖楼层为第5楼,但5楼为无效楼层,即顺延至第6楼获奖,若依然为无效楼层,则继续顺延,以此类推,奖品为《刷脸背后》书籍1本
-
1. Maven简介Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。相对于传统的项目,Maven 下管理和构建的项目真的非常好用和简单,所以这里也强调下,尽量使用此类工具进行项目构建, 它可以管理项目的整个生命周期。(1)下载Maven 官方地址:http://maven.apache.org/download.cgi (2)将文件解压到某个目录 (3)配置maven环境变量 ●Maven环境测试打开命令行窗口,输入mvn -v,如果有maven 版本信息输出则证明配置成功,否则请查看自己配置路径等是否正确。注意:安装maven前请确保已安装JDK并成功配置其环境变量。显示版本信息的命令:mvn -v 在C:\Users\Administrator下创建.m2目录的命令:mvn help:system 执行该命令后将在C:\Users\Administrator下创建.m2目录。该目录将作为本次仓库的根目录,在该目录下可以放置配置文件和repository。 (4)将maven安装目录下的conf/settings.xml文件复制到C:\Users\Administrator\.m2目录下。使用国内华为云的Maven公共仓库,下载依赖构建包速度很快,否则,maven项目默认从国外的中央仓库下载。<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <mirrors> <mirror> <id>huaweicloud</id> <mirrorOf>*,!HuaweiCloudSDK</mirrorOf> <url>https://repo.huaweicloud.com/repository/maven/</url> </mirror> </mirrors><profiles> <profile> <id>MyProfile</id> <repositories> <repository> <id>HuaweiCloudSDK</id> <url>https://repo.huaweicloud.com/repository/maven/huaweicloudsdk/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </profile></settings>2、在IntelliJ IDEA中配置maven(1)打开-File-Settings (2)Importing保留其默认值1)如下图标注2所示,Import Maven projects automatically 表示 IntelliJ IDEA 会实时监控项目的 pom.xml 文件,进行项目变动设置。2)如下图标注3 所示,在 Maven 导入依赖包的时候是否自动下载源码和文档。默认是没有勾选的,也不建议勾选,原因是这样可以加快项目从外网导入依赖包的速度,如果我们需要源码和文档的时候我们到时候再针对某个依赖包进行联网下载即可。IntelliJ IDEA 支持直接从公网下载源码和文档的。3)下图标注 4所示,可以设置导入的 VM 参数。一般这个都不需要主动改,除非项目真的导入太慢了我们再增大此参数。 3、在IntelliJ IDEA中创建Java project(1)File -> New -> Project... (2)创建HelloWorld程序 (3)设置项目名称和指定项目保存的位置(工作区目录) (4)环境搭建成功点击右上角工具栏中的运行按钮(绿色三角箭头),运行编译 创建结束后,项目代码结构如下: 4、在IntelliJ IDEA中基于Maven创建 Java 项目(1)File -> New -> Project... (2)设置GroupId和ArtifactId属性值 GroupId:是一个工程在全局中的唯一标识符,一般地,它就是工程名,使用一个完全的包名将一个工程识别出来。Artifact:是工程将要产生或需要使用的文件,可以是.jar,.war,源文件等。每个Artifact由GroupId和ArtifactId组合进行唯一识别。(3)指定Maven的安装目录 (4)指定项目保存的位置(工作区目录) (5)点击Finish后,项目代码结构如下: (6)选择根目录-> src-> main-> java文件夹,右击选择new->Java class,新建一个名称为test的java类文件: (7)运行测试程序,在编辑区右击选择Run ‘test.main()’,在控制台中能看到“hello world”说明项目创建成功:
-
大家好,欢迎来到本期物联网技术小课堂,今天我们将给大家就蜂窝无线通信中发射功率和接收灵敏度的概念做详细讲解,若有不对!还请各位大佬及时批评指正!上图就是蜂窝通信网络的基本结构,也就是我们日常生活中使用的手机网络结构。在切入正题之前,我们先来看下目前的几种重要的无线通信技术的特点:先看LoRa,美国semtech公司创建的低功耗局域网无线标准。2015年成立的LoRa联盟在全球积极推动LoRa技术的商用。国内**通讯发起成立中国LoRa应用联盟(CLAA)。通信距离城镇2-5Km,郊区10Km左右;通信速率十到百Kbps左右;ISM工作频段 包括433、868、915 MH等。因其商用和成熟度限制,应用规模较小,现集中于企业级的私网应用。再看Sigfox,实际是Sigfox建立的一套自上而下,从芯片、终端、网络、后台数据和云服务的生态。Sigfox无线接入网利用超窄带UNB技术,实现小数据低功耗数据传输。ISM工作频段,农村地区传输距离约30-50km,城市3-10km。好了!闲话到此为止!咳!咳!咳!没抓住重点有点跑偏了,其实大陆地区还是要看NB-IoT的戏台。(样品领取微信公众号:OneMO2019)言归正传,上面表格中提到的LoRa、SigFox、NB-IoT以及eMTC都是通过电磁波进行信息传输。电磁波能量的单位是W,dBm。发射功率,就是我们喊话的时候嗓门有多大。嗓门大了声音传的就远,嗓门小声音传的就近。实际就是指发射机的发出电磁波的能量。接收灵敏度呢,就是你耳朵能识别到的最小声音。发射机发送的电磁波经过空间损耗后,达到接收机,接收机能够识别到的、最低的电磁波能量。通常来说2G物联网模组的接收灵敏度在-108dBm左右。负的越多,灵敏度也就越高,有效距离也就越远。接收灵敏度采用dBm单位而不采用W作为单位,是因为其具体数值太小。它们两者之间关系如下:按照这个公式,NB-IoT模组的接收灵敏度-130dBm,可以换算成毫瓦值为:0.0000000000001mW。0太多,有点晕,容我喝口水压压惊。。。现在设想,我们在吵杂的马路上,此时讲话对方听不见,最简单的方式就提高声音;此时吵杂的环境就相当于外部干扰,外部干扰的大小直接影响接收机的接收效果。此时可以提高发射功率(加大嗓门),也可以提高接收灵敏度(两人距离近一点)。也就是说这两个指标对于“通信”来说都极其重要。无线通信模组是物联网通信设备的核心器件,帮助物联网终端实现数据的空中传输。即上文提到的发射机或接收机的作用。发射功率和接受灵敏度对模组性能的两个重要指标,下面以中移物联网NB无线通信模组M5311为例:(热点技术讨论QQ群:123242102)M5311模组RF输出功率22.5dBm,换算成W约为178mW。这是个什么概念?某2G模组在900M Class 4条件下2W输出功率。一眼见高低。NB-IoT如此低的功耗,接收灵敏度如何?在上面其实已经啰嗦过了,传统2G终端接收灵敏度在-108dBm左右,换算为瓦特值为1.6*10-11mW,而NB-IoT模组呢,以M5311为例在-130dBm接收灵敏度情况下,约为1*10-13mW。好了,今天的课程就给各位分享到这里,下次我们再给大家分享其他小知识。感谢各位大佬收听。下期在会!小弟我初来此地,还望各位大佬多多包涵,如有不对请及时指正!文章中含有小彩蛋,各位大佬可以仔细看看哦!
-
大家好,欢迎来到本期物联网技术小课堂,今天我们将给大家就蜂窝无线通信中发射功率和接收灵敏度的概念做详细讲解,若有不对!还请各位大佬及时批评指正!上图就是蜂窝通信网络的基本结构,也就是我们日常生活中使用的手机网络结构。在切入正题之前,我们先来看下目前的几种重要的无线通信技术的特点:先看LoRa,美国semtech公司创建的低功耗局域网无线标准。2015年成立的LoRa联盟在全球积极推动LoRa技术的商用。国内**通讯发起成立中国LoRa应用联盟(CLAA)。通信距离城镇2-5Km,郊区10Km左右;通信速率十到百Kbps左右;ISM工作频段 包括433、868、915 MH等。因其商用和成熟度限制,应用规模较小,现集中于企业级的私网应用。再看Sigfox,实际是Sigfox建立的一套自上而下,从芯片、终端、网络、后台数据和云服务的生态。Sigfox无线接入网利用超窄带UNB技术,实现小数据低功耗数据传输。ISM工作频段,农村地区传输距离约30-50km,城市3-10km。好了!闲话到此为止!咳!咳!咳!没抓住重点有点跑偏了,其实大陆地区还是要看NB-IoT的戏台。(样品领取微信公众号:OneMO2019)言归正传,上面表格中提到的LoRa、SigFox、NB-IoT以及eMTC都是通过电磁波进行信息传输。电磁波能量的单位是W,dBm。发射功率,就是我们喊话的时候嗓门有多大。嗓门大了声音传的就远,嗓门小声音传的就近。实际就是指发射机的发出电磁波的能量。接收灵敏度呢,就是你耳朵能识别到的最小声音。发射机发送的电磁波经过空间损耗后,达到接收机,接收机能够识别到的、最低的电磁波能量。通常来说2G物联网模组的接收灵敏度在-108dBm左右。负的越多,灵敏度也就越高,有效距离也就越远。接收灵敏度采用dBm单位而不采用W作为单位,是因为其具体数值太小。它们两者之间关系如下:按照这个公式,NB-IoT模组的接收灵敏度-130dBm,可以换算成毫瓦值为:0.0000000000001mW。0太多,有点晕,容我喝口水压压惊。。。现在设想,我们在吵杂的马路上,此时讲话对方听不见,最简单的方式就提高声音;此时吵杂的环境就相当于外部干扰,外部干扰的大小直接影响接收机的接收效果。此时可以提高发射功率(加大嗓门),也可以提高接收灵敏度(两人距离近一点)。也就是说这两个指标对于“通信”来说都极其重要。无线通信模组是物联网通信设备的核心器件,帮助物联网终端实现数据的空中传输。即上文提到的发射机或接收机的作用。发射功率和接受灵敏度对模组性能的两个重要指标,下面以中移物联网NB无线通信模组M5311为例:(热点技术讨论QQ群:123242102)M5311模组RF输出功率22.5dBm,换算成W约为178mW。这是个什么概念?某2G模组在900M Class 4条件下2W输出功率。一眼见高低。NB-IoT如此低的功耗,接收灵敏度如何?在上面其实已经啰嗦过了,传统2G终端接收灵敏度在-108dBm左右,换算为瓦特值为1.6*10-11mW,而NB-IoT模组呢,以M5311为例在-130dBm接收灵敏度情况下,约为1*10-13mW。好了,今天的课程就给各位分享到这里,下次我们再给大家分享其他小知识。感谢各位大佬收听。下期在会!小弟我初来此地,还望各位大佬多多包涵,如有不对请及时指正!文章中含有小彩蛋,各位大佬可以仔细看看哦!
-
上节课,我们一起学习了注册设备,这节课我们继续按照基于SoftRadio模拟器进行OceanConnect平台对接整体流程,学习如何安装及配置SoftRadio。希望通过本节课程,了解华为SoftRadio软件以及如何安装及配置SoftRadio。Device以及APP应用开发与调试过程中,Open Lab是最重要的锚点,连接厂家device和海思芯片/模组接入NB-IoT网络,同时连接IoT平台以及APP server。由于NB-IoT的标准协议在16年6月底冻结,NB-IoT的芯片/模组还没有规模生产,同时华为Open Lab资源紧张,给产业链合作伙伴的device以及APP应用的开发调测增加了成本,同时导致调试效率低下。在此背景下,考虑用一个软件版本,来代替NB-IoT Chipset/Module,同时屏蔽NB-IoT Air Interface,提供一条通路直接到IoT平台,合作伙伴在自己家里就可以远程连接到华为IoT平台,进行终端和APP应用的开发以及端到端调测,实现offsite模式,不受时间和空间以及硬件限制,这就是SoftRadio。SoftRadio是一款PC软件,在测试场景下,合伙伙伴在不需要芯片/模组、NB-IoT基站和核心网的情况下,借助PC端的SoftRadio软件,任何时候都可通过互联网连接到IoT平台和APP应用,用于NB-IoT设备到APP Server端到端的基本功能调试,大大提升调试效率,加速Usecase业务快速上市。更多内容,烦请点击下方图片,学习如何安装及配置SoftRadio。学习完第六课的童鞋,恭喜你,你离物联网大咖又近了一步。第六课结束后,我们成功的学习了如何安装及配置SoftRadio,下节课我们学习如何使用SoftRadio进行数据上报。【已经上线】第七课 使用SoftRadio进行数据上报
-
DevCloud Maven私有依赖库批量迁移和维护工具介绍 使用场景: 1.当你需要使用华为云DevCloud中的maven私有依赖库服务时,迁移神器可以帮助你将原来自己本地私服中的私有组件批量迁移到云上。2.当你需要对DevCloud上maven私有依赖库中的组件进行批量更新维护时,该工具也能提供帮助。必要准备条件:安装JDK1.7+以上。 JDK下载地址:https://repo.huaweicloud.com/java/ 使用方法:1.登录华为云并进入DevCloud服务,从左上角目录菜单中进入私有依赖库服务,如下图:2.在Maven私有依赖库中选择"更多操作”>>“批量迁移和维护”操作下载工具包,如下图:3.双击打开工具包,展示如下页面: 说明:1)选择本地目录上传时,如果目录中只有jar包而没有匹配的坐标说明文件pom.xml将无法上传成功。2)同一目录下的jar包必须要和其对应的POM文件同名,否则会提示查询失败。4.在DevCloud Maven私有依赖库页面,通过选择“更多操作”>>“仓库地址”可以获取上诉工具需要填入的maven私有依赖库仓库地址,复制后填入即可。5.在DevCloud Maven私有依赖库页面,通过选择“立即使用”后弹出的提示框中可以下载maven setting.xml配置文件,setting.xml文件中<server></server>标签中的username和password的内容就是工具需要的私有依赖库的账号和密码。如下图最后,如您在使用中有任何疑问或建议,可直接在帖子中回帖或通过DevCloud页面中右上角区域的“意见反馈”找到我们获取帮助,我们将会及时响应。祝使用开心!
-
实验目的通过使用Java+SDK管理华为云对象存储OBS,了解对象存储的基本原理和操作,熟悉SDK的使用方法,为后续需要开发复杂功能提供入门准备。准备动作1、电脑上安装Java开发环境+Eclipse,可参考网上的教程:Java安装教程:http://www.runoob.com/java/java-environment-setup.html#win-installEclipse+汉化教程:https://blog.csdn.net/weixin_41848531/article/details/817364142、下载华为云OBS SDK,笔者编辑本文时,最小版本是OBS Java SDK 3.0.0 ,SDK安装过程如下:a.下载OBS Java SDK开发包。b. 在Eclipse中创建一个Java工程b. 将解压后的文件:esdk-obs-java-<versionId>.jar 以及third_party文件夹下所有的JAR包拷贝到您的项目中。c. 在Eclipse中选择您的工程,右击选择 Properties > Java Build Path > Add JARs。3、下载OBS的访问密钥key文件。a. 登陆华为云网站(www.huaweicloud.com),进入OBS控制台,下载访问密钥。密钥key是一个xxx.csv的表格文件,其中Access Key Id对应OBS API中的ak,Secret Access Key对应OBS API中的sk。密钥key的作用:通过网站访问对象存储OBS,需要先通过账号密码登陆网站。通过代码访问OBS,如果也需要输入账号密码,就会使得的代码变复杂。因此密钥key可以认为是经过加密的账号和密码,代码中可直接使用。 密钥key文件只在生成的时候提供下载,因此下载后需妥善保存。4、打开JDK包中的开发指南《对象存储Java SDK开发指南.doc》内含丰富的说明。操作步骤 1、在eclipse工程中左侧工具栏中找到自动生成的xxx.java,编写一个java类,输出欢迎语句。点击eclispe工具栏上的 调试或运行按钮,在结果中可看到欢迎语句。package main; import java.io.*;import java.io.IOException; public class main {public static void main(String[] args) {System.out.println("welcome to china!!!");}}2、创建一个OBS客户端。电脑是访问OBS的客户端,华为云的OBS是服务器。2.1 公有云的数据中心是分区域的,每个OBS访问地址都是通过“后缀endpoint”来指定数据是存放在哪个区域的数据中心的。“后缀endpoint”的查询地址:https://developer.huaweicloud.com/endpoint3.3 参考《对象存储服务Java SDK开发指南.doc》分别编辑创建OBS客户端、创建桶、上传对象和查看所有对象,具体代码参考后续完整代码。3.4 点击eclipse的调试或运行按钮,在控制台中显示创建桶成功,显示所有对象成功。控制台中提示日志插件和性能统计错误,不影响功能,可忽略不计。3.5 在华为云OBS 对象存储控制台中,可看到新增生成的桶和上传的文件。完整代码package main; import java.io.*;import java.io.IOException; import com.obs.services.ObsClient;import com.obs.services.exception.Ob**ception;import com.obs.services.model.*; public class main {/* 初始化OBS客户端所需的参数 */private static final String endPoint = "https://your endpoint";private static final String ak = "your ak";private static final String sk = "your sk";private static final String g_bucketName = "hello-obs-demo";private static final String g_bucketLoc = "cn-south-1"; public static void main(String[] args) {System.out.println("welcome to china!!!");/* 创建OBS客户端 */ObsClient obsClient = new ObsClient(ak,sk,endPoint);ObsBucket obsBucket;try {/* 创建一个桶 */obsBucket = createBucket(obsClient);/* 从本地笔记本上传文件到桶里面 */uploadFile(obsClient, obsBucket);/* 列举对象(文件)的信息 */listFile(obsClient,obsBucket);/* 关闭客户端 */}catch (Ob**ception e){System.out.println("main 函数出现错误!!!");}/* 关闭obs客户端 */closeObsClient(obsClient);}/* 创建一个桶 */private static ObsBucket createBucket(ObsClient obsClient) throws Ob**ception{ObsBucket obsBucket = new ObsBucket(g_bucketName,g_bucketLoc); obsClient.createBucket(obsBucket); System.out.println("Create bucket:" + g_bucketName + " successfully!"); return obsBucket;}/* 创建一个对象(文件) */private static void uploadFile(ObsClient obsClient, ObsBucket obsBucket) throws Ob**ception{File newfile = new File("C:\\Users\\xiaoniu\\Desktop\\temp\\hello.txt");obsClient.putObject(obsBucket.getBucketName(), "folder/", newfile);obsClient.putObject(obsBucket.getBucketName(), "hello1", newfile);obsClient.putObject(obsBucket.getBucketName(), "hello2", newfile);}/* 列举对象(文件)的信息 */private static void listFile(ObsClient obsClient, ObsBucket obsBucket) throws Ob**ception{System.out.println("开始测试桶里面的对象信息");ObjectListing objList = obsClient.listObjects(obsBucket.getBucketName());for (ObsObject obj : objList.getObjects()){System.out.println("--:"+obj.getObjectKey()+" (size=" + obj.getMetadata().getContentLength()+")");}}/* 关闭客户端 */private static void closeObsClient(ObsClient obsClient) {try{obsClient.close();}catch (IOException e){System.out.println("close obs client error.");}}}
-
通常,我们眼中的软件开发是这个样子的……工作高端、大气、上档次,这是一件化腐朽为神奇的事儿,更是一股充满创造的力量……然而在程序猿们的眼中,软件开发竟然是……好不容易才搭建好一个开发环境,费了九牛二虎之力,悲催的是竟然无法使用,第一步都如此不顺,上线更是遥遥无期……团队同事临时被抽调出差,不巧,他写的代码出现bug,我竟然无权限修改,内心的崩溃在风中凌乱……提升软件质量靠代码,这事儿没错,但交叉看谁有时间?找大拿?更没工夫……这事儿简直太累了…… 新旧代码交替繁乱,质量效果各不相同,频繁修补之后,本地记录早已“千疮百孔”,自己看着都头痛……尽管这些问题还不算是软件开发过程中出现的全部障碍,此外还有业务沟通、工程交互、部署测试等说不完的困难……但却是开发者们真实且经常遭遇的“神坑”,难道没有办法解决吗?恒少,一位来自华为云的技术专家,也是我这篇科技圈时髦文体《XXX时间,我跟XX聊了聊》文章的主人公。他听完我的吐槽,并没有立即推荐各种高效的解决方案,而是给我讲述了他与软件开发以及华为的“情缘”。恒少认真地说:“软件开发一直都是我特别喜欢的工作,工科类的学生似乎都很喜欢动手创造新事物这种感觉,软件开发正好符合这一点。” 传说中的恒少据他介绍,如今在华为云,软件开发服务(DevCloud)已经将数万研发人员、三十年积淀的研发工具、经验开放到公有云上,以项目管理、代码托管、代码检查、CloudIDE等九大服务为基础,提供了IOT、Web开发等众多解决方案。“就像你刚才提到的代码问题,其实在华为云软件开发中就有相应的检查服务,DevCloud提供了1288条规则来保障软件质量,未来还会持续注入先进技术确保云端代码检查规则实时更新。”恒少表示。更重要的一点,他强调,华为云软件开发服务不单单只是发现问题,主要还是着眼于解决。提供的软件流水线可以随意编排代码检查、测试、部署和子流水线等服务,通过可视化编排和一键式部署,确实将软件上线周期缩短50%,尤其对中小企业帮助很大。如今,恒少的工作内容主要基于华为云,所以他比任何人都清楚、都了解。掐指一算今年正是他在华为一线奋战的第十三个年头,听完讲述,我深深感觉到,恒少这段精彩又充满挑战的经历,真的可以称作华为30年研发沉淀的缩影。慕名进华为,近距离感受开发者文化如果详细展开这个故事,时间还要追溯到2005年,那时的恒少刚刚走出大学的校园,从本科学习自动控制专业到研究生继续攻读系统工程,最后怀揣着“软件开发”的初心走入华为这个大家庭。 谈及当时走进华为的选择,恒少很实在。“那时候学校中很多前辈都出自华为,更重要的是华为很重视我们这种类型的毕业生,毕竟是第一份工作,太有吸引力了!”他表示。企业的软件开发面向行业交付,要求质量、进度;而学校中的软件科研项目更偏向于技术的探索,尽管在视野上得到了创新,但这种偏差让却没少让恒少“吃苦头”,将知识转化为产品,还得好用,这事儿说来容易做起难。十几年前,华为主要还是做电信类产品,恒少作为一名初来乍到的程序员,就参与了刚刚立项不久的产品软件开发。但由于电信类产品都是基于协议的,正巧经手的产品其国际协议又刚刚发布不久。将厚厚的一沓协议转变为可稳定运行的产品以及解决方案,这个难度可想而知。作为一个新人,代码才略懂,就直接去做产品调试以及协议接口等工作。恒少表示,至今都记得,在嘈杂的机房中看着一堆堆error的协议消息,背后是周边产品焦急等待的同事这样一个场景……初来的开发人员面对像恒少一样的窘境,难免会措手不及。但庆幸的是,华为凭借自身多年的培养体系积累,可以为开发者人员们提供大量有价值的资料并引导学习;甚至还设置专门的导师制度,手把手帮助解决业务问题、熟悉团队运作等,这种大而细致的开发者文化让恒少至今都记忆犹新。“作为开发人员,从技术角度看,华为是先进的。但对开发者来说更重要的一点,在华为可以将自己所学,无论是编程还是代码,实实在在融入软件中,让需要的人使用,这是我们特别希望的一种方式。”恒少补充道。如今恒少将工作内容转向势头正旺的华为云业务,他深深感受到,华为发力云计算业务之后,对开发者的引力越发强大。30年的积累、9万多用户……除了继承企业优良的开发者文化,更多还让人们意识到华为云巨大的成长空间以及良性的创造氛围,对于开发者们来说,华为过去或许很“传统”,但现在却很“互联网”。华为:冷静对待热点、较真产品质量谈及华为云服务,优先级的产品质量、被视为头条的用户体验、持续提升的研发效能、予以坚持的战略投入……这些特性都会一一蹦出脑海。但在30多年的产品研发中,华为并不是一开始就对这些先知先觉,而是历经波折才更加意识到质量、效能、用户体验的极度重要性,对此恒少深有体会,可以说在华为的工作经历教会了开发人员对产品质量始终保持敬畏之心。从传统IT到企业云服务,用户至上的信条被传承,但对技术方向的敏锐捕捉,华为却始终目光如炬,在“变与不变”中谋求进一步的发展。在采访中,和恒少探讨“企业追逐技术热点”的问题,他表示,在企业追逐风口的过程中,华为最大的不同就是不盲目,这种冷静客观的态度被称为“拧麻花”。“在华为,长期的研究与短期的产品开发与交互会形成一种部署,绝对不会一味研究新技术而忽视了产品的走向,上新就要对相应的产品发生帮助,毕竟单纯研究新技术还是比较容易的事儿,而且更重要一点,华为追新也是循序渐进的,例如上云。”恒少强调。说到“上云”的历程,据了解,2008年左右,华为几乎与业界同步开始引入敏捷,并随后进行了从上至下的敏捷转型,希望以更敏捷的研发来应对日益短周期的市场交付,这个时间恒少也开始接触敏捷。总体来说,向敏捷的转型,华为面临了诸多挑战。很长一段时间,恒少也在思考,敏捷这件事儿与提升研发效能、优化产品质量和用户体验等,是否可以画个等号呢?就算推行了敏捷开发,似乎端到端的生命周期依旧很长,又该如何是好?对此,恒少有自己的一套理论,以前的华为产品主要面向运营商,SDD的流程不知不觉已经运转了十几年;但部署进入云计算领域后,之前的开发模式、市场交互模式等与之前完全不同,这个时候引入一个基于云服务的新流程是非常有必要的,所以敏捷势在必行。在这个理念的指导下,恒少与同事们开始推动敏捷逐渐从小团队走向整个产品。先进的方法、理念和实践的落地最终还是需要端到端的研发工具支持,所以恒少与同事们也同步启动了ALM(Application Lifecycle Management),整合并演进一批已有的研发工具,形成覆盖从需求到最终交付上线的软件全生命周期管理系统,达成从嵌入式软件到应用软件、云服务,并与芯片、硬件的生命周期管理形成整体解决方案,以“技术工程师”的角度协同软硬件团队一起发展。通常来说,我们知道的敏捷开发需要经过准备、计划、开发以及反馈四个阶段。与传统的敏捷模式不同,华为的新型模式会通过云端自动化的持续交付流水线来完成构建以及测试的工作,无论是接口还是可靠性,同时还可将Ops端手工操作的时间减少80%,团队可以充分聚焦于业务分析、开发交付及运营上,质量与效率可得到双保证。踏足云计算,循序渐进、不忘初心经过前期的积淀,华为于2016年正式进入云计算领域,敏捷只是“第一站”,DevOps作为云服务与生俱来的研发模式和流程,也开始被恒少以及同事们提上日程。随着华为云服务技术的逐渐成熟,其ICT研发实验室的服务化率先取得成功。客户很多时候通过Internet就可以访问遍布全国各地华为研究所的云化实验室资源,从基站到路由器,乃至终端设备。恒少表示,不但可以远程体验,还能将原先必须在客户侧搭建设备才能验证的测试放在实验室执行,大大缩短了客户需求的验证时间。谈及DevOps部署的经验,恒少觉得,最重要还是不要盲目追赶热点,毕竟DevOps的“上马”是需要一定基础的。通常来说,企业的属性为自运营,例如云服务的方式通过SaaS来提供,这样来看,企业就可以拥有属于自己的DevOps团队,Ops团队,然后融合使用DevOps方法。相比之下,很多企业经营外包业务,做好软件后交付给企业级用户,然后自行在中心机房中部署,软件的运维属于用户方,企业只是负责Dev,如果盲目去做DevOps,结果必然失败,认清自己的商业与交互模式对DevOps很重要。“另外,企业管理层是否支持更广层面的DevOps推广也很关键。当然,这些条件通通具备后,定期针对DevOps研发细致总结并同时更新工具也很必要。毕竟流程方法的实践最终还是通过工具来体现,文档是没有办法让大家高效使用的。”恒少补充道。其实以恒少为代表的华为人所做的一切,都是在思考如何从软件全生命周期的角度出发提升效能并保证质量。如今云厂商“琳琅满目”,回到华为云的软件开发服务,恒少对记者说:“我们的软件开发服务,很重要的一个特点就是提供的工具很多,尽管业界的工具也不少。这些工具沉淀了华为多年的研发实践经验,哪怕是如何规划、满足需求等细枝末节都包含其中,模板真实存在并可以供客户直接使用的,这种突出的转化效率是特征,更是优势。”华为云软件开发服务秉承了多年来华为内部“端到端”的理念,尽管不可避免的是某种特性或者功能上确有短板,但端到端的整合让用户再也无须考虑与工具之间的集成。简单来说,开通云服务就可使用,无论是接口对接、工具适配、还是上线部署与反馈,都是便捷又实在的事儿。“还有更重要的一点,也是华为云一直强调的口号,我们提供的DevOps工具链会管理用户的需求、代码,却真的看不到用户的信息,不碰数据是华为云软件开发服务安全的首要保证,另外不断更新的理念与方法也让我们持续保持创新的动力。”他进一步说。在采访的最后,恒少提到了即将开幕的华为全联接大会。他表示,华为从运营商设备、终端设备一路走来,如今又做起了云服务,形成了一套“云-管-端”的解决方案模式,对开发者而言,这可以说是业内最完整的解决方案了,从云端到管道,到边缘,再到手机端,是一个完整又丰富的生态。不管你从事底层的驱动开发、还是软件开发,抑或是云服务软件开发……都可以从华为全联接大会上学到很多东西,找到自己的兴趣点。 10月10日-10月12日,HUAWEI CONNECT 2018将以“+智能,见未来”为主题,携手来自全球的ICT产业领袖、行业先锋、生态伙伴、商界智囊,共同探讨如何利用智能技术把握未来行业新机遇,共襄数字转型,共创智能未来。届时,大会将首发华为AI战略和全栈全场景的解决方案,并携合作伙伴分享AI、云、大数据、5G、IoT、视频等在各行业的创新与实践。突破业界历史记录,2018华为全联接大会将上演近千场峰会和论坛,和超过三万平米的展示区,必将再次带给大家更多的惊喜与震撼。恒少个人主页
上滑加载中
推荐直播
-
探秘仓颉编程语言:华为开发者空间的创新利器
2025/02/22 周六 15:00-16:30
华为云讲师团
本期直播将与您一起探秘颉编程语言上线华为开发者空间后,显著提升开发效率,在智能化开发支持、全场景跨平台适配能力、工具链与生态完备性、语言简洁与高性能特性等方面展现出的独特优势。直播看点: 1.java转仓颉的小工具 2.仓颉动画三方库lottie 3.开发者空间介绍及如何在空间用仓颉编程语言开发
即将直播 -
大模型Prompt工程深度实践
2025/02/24 周一 16:00-17:30
盖伦 华为云学堂技术讲师
如何让大模型精准理解开发需求并生成可靠输出?本期直播聚焦大模型Prompt工程核心技术:理解大模型推理基础原理,关键采样参数定义,提示词撰写关键策略及Prompt工程技巧分享。
去报名 -
华为云 x DeepSeek:AI驱动云上应用创新
2025/02/26 周三 16:00-18:00
华为云 AI专家大咖团
在 AI 技术飞速发展之际,DeepSeek 备受关注。它凭借哪些技术与理念脱颖而出?华为云与 DeepSeek 合作,将如何重塑产品与应用模式,助力企业数字化转型?在华为开发者空间,怎样高效部署 DeepSeek,搭建专属服务器?基于华为云平台,又该如何挖掘 DeepSeek 潜力,实现智能化升级?本期直播围绕DeepSeek在云上的应用案例,与DTSE布道师们一起探讨如何利用AI 驱动云上应用创新。
去报名
热门标签