• [产品体验官] iMaster NCE-Campus基于开发者社区云端开放API体验测评-by铺路能手
    此处省略,详见附件
  • [产品体验官] 体验官有奖体验第20期 | iMaster NCE-Campus云端开放API体验及评测 by Mike Cao
    华为云:vipmike007    微信昵称:Mike Cao总理来说,我觉得还不错,这也是我做了几期体验官以来最容易的一次体验了,本来觉得有 api 调用得弄2 个小时,结果连截图带报告不到一个小时就完成了,当然也和华为的园区北向接口调用入门课程设计的好有关系。 在测评任务卡里面已经写清楚了每一步遇到的问题,后面我总体说下我的意见。首先在下载 postman 这个东西华为官网的文档推荐的是用 Chrome 商店的插件,因为众所周知的原因,建议提供可以下载插件的地址其次, 不理解为什么 postman 操作指南里面用 postman chrome 插件的方法,为什么不直接推荐用户试用 postman app呢然后再说下 api 手册,好的地方就是提供了 java 和 python 两种sdk 调用方法,我觉得这是一个优势,但是华为是不是混淆了 Rest API 和 SDK 呢。我理解查看文档里面显示的是 API,在实例文档里面应该加上如何调用此 API 的方法,而不是直接写怎么调用 sdk 实现,所以应该再加一个 tab.接口概述 里面的接口分类和范围写的很清楚,建议加上调用方法,如果没必要那就去掉调用的接口地址最后一点和 API 功能无关,和试验环境有关系,远程界面经常断开连接,我大概看了下远程连接用的是开源项目guacamole,建议在连接的时候提示的信息(如果自己自主研发的请忽略),因为这毕竟属于把开源软件放到华为的商用软件上了。可能会有 license 风险评测见附件
  • [产品体验官] 体验官有奖体验第20期 | iMaster NCE-Campus云端开放API体验及评测 by Mike Cao
    华为账号: vipmike007群内昵称: Mike Cao总理来说,我觉得还不错,这也是我做了几期体验官以来最容易的一次体验了,本来觉得有 api 调用得弄2 个小时,结果连截图带报告不到一个小时就完成了,当然也和华为的园区北向接口调用入门课程设计的好有关系。 在测评任务卡里面已经写清楚了每一步遇到的问题,后面我总体说下我的意见。首先在下载 postman 这个东西华为官网的文档推荐的是用 Chrome 商店的插件,中国应该连接不上,建议提供可以下载插件的地址其次, 不理解为什么 《Postman使用操作指导》用 postman chrome 插件的方法,为什么不直接推荐用户试用 postman app呢然后再说下 api 手册,好的地方就是提供了 java 和 python 两种sdk 调用方法,我觉得这是一个优势,但是华为是不是混淆了 Rest API 和 SDK 呢。我理解查看文档里面显示的是 API,在实例文档里面应该加上如何调用此 API 的方法,类似于https://devzone.huawei.com/cn/enterprise/campus/pythonApi.html  里面的 code而不是直接写怎么调用 sdk 实现,所以应该再加一个 tab. (请参照https://docs.cloud.oracle.com/iaas/Content/API/Concepts/usingapi.htm)接口概述 里面的接口分类和范围写的很清楚,建议加上调用方法,如果没必要那就去掉调用的接口地址最后一点和 API 功能无关,和试验环境有关系,远程界面经常断开连接,我大概看了下远程连接用的是开源项目http://guacamole.apache.org/,建议在连接的时候提供下相关的信息(如果自己自主研发的请忽略),因为这毕竟属于把开源软件放到华为的商用软件上了。可能会有 license 风险详细测评报告见附件
  • [产品体验官] 体验官有奖体验第20期 | iMaster NCE-Campus云端开放API体验及评测 by 阿祥
    华为云:zhengyx微信昵称:阿祥评测见附件
  • [产品体验官] 体验官有奖体验第20期 | iMaster NCE-Campus云端开放API体验及评测_by fjqsun
    本期体验产品:  iMaster NCE-Campus云端开放API华为云账号:fjqsun微信昵称:@~@详情见附件。
  • [产品体验官] 体验官有奖体验第20期 | iMaster NCE-Campus云端开放API体验及评测_邢好好
    by  邢好好
  • [问题求助] 北向API接口如何根据设备ID查询设备信息
    我使用批量查询的接口,根据北向API 1.9.0的手册的示例,https://device.api.ct10649.com:8743/iocm/app/dm/v1.4.0/devices?gatewayId=gatewayId1,我用这个可以查到单独一个设备,或者不填gatewayId这一参数,可以查询到所有设备,但是如果我想查两个设备,那该怎么拼,第二个设备ID该写在哪里?谢谢大家帮忙解答一下吧
  • [热门活动] [体验官]体验官有奖体验第20期 | iMaster NCE-Campus云端开放API体验及评测
    本期体验产品:  iMaster NCE-Campus云端开放API活动链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=37294&page=1&extra=#pid116995
  • [产品体验官] 体验官有奖体验第20期 | iMaster NCE-Campus云端开放API体验及评测
    本期体验产品:  iMaster NCE-Campus云端开放API什么是 iMaster NCE-Campus云端开放API?                iMaster NCE-Campus云端开放API体验是依托于智简网络数据通信开发者社区,为开发者提供学习、开发、测试、交流一站式支持与服务。开发者可以免费获取iMaster NCE-Campus开放的API指导教程,在线体验API模拟调用以及学习基于iMaster NCE-Campus沙箱能力的北向接口调用入门在线课程。体验形式:      本次体验采用有奖征集体验评测报告+群内交流反馈的形式。首先从体验官社群中筛选出25人,按照任务卡体验产品并按照测评维度输出产品体验评测报告。我们会按照评测体验维度、深度、意见建议等方面,从中筛选出高质量体验报告,给予礼品奖励。中奖率超高哟~~☆奖品设置如下☆ 金牌测评体验报告奖:3名奖品:荣耀体脂秤1个                            银牌测评体验报告奖:7名奖品:华为云定制双肩包1个  体验评测报告优秀参与奖:15名奖品:精美鼠标垫1个☆产品体验评测报告内容要求☆体验评测报告内容需要包含以下维度:       请各位体验官按照附件PPT(任务卡)要求完成任务,并根据以下维度将自己在使用产品的过程中存在的体验问题及意见提供建议等。本次体验活动包括以下三种场景:1、  了解智简园区网络云端开放API2、  在线调用智简园区网络云端开放API3、  体验在线课程:园区北向接口调用入门        请各位体验官按照附件PPT(任务卡)完成四种场景下的8个任务,并且根据自己的使用体验针对社区存在的问题和意见提出您的宝贵建议。体验建议可参考以下几个方面:a)         五大类应用场景是否容易理解;b)         操作是否容易上手;c)         学习教程是否易懂,是否满足开发需求;d)         使用过程中有哪些不好的体验,是否出现卡顿、宕机、程序无反应等情况。产品链接:https://developer.huaweicloud.com/resource/network.html竞品参考:Cisco Meraki-Developer Hub(https://developer.cisco.com/meraki/) 体验评测报告交稿时间: 2020年1月17日 16:00前,请报名评测的体验官将评体验测报告发帖上传到华为云社区开发者交流论坛中,分类选择(体验官)。并同步微信告知小助手(微信:hwyxzs)微信号。2020年2月1日 16:00前,将获奖信息告知体验官。 体验报告发帖地址:https://bbs.huaweicloud.com/forum/forum-557-639-1.html发帖时,请上传已填些完毕的任务卡(ppt),并在帖子内标注微信群昵称,以便评奖时使用 。
  • 【中间件最佳实践挑战】第1关任务:基于API网关的电话号码归属地查询
    欢迎参加华为云活动“中间件最佳实践挑战营”!这是本次挑战营的第1关,坚持闯关成功有机会获第五期好礼:码豆/荣耀手环/华为背包等,全通关还有大奖!本期活动截止5月24日。注意:参与闯关前,请确保已报名加入活动群并领取实践资源,如未入群请点击添加小助手微信(zhongjianjianxiaoge),回复“中间件”报名入群!点击这里了解活动详情>>  | 点击这里查看活动FAQ>> 一、  场景介绍本手册基于华为云API网关实践所编写,用于指导您开放并调用API。本手册主要指导您将电话号码归属地查询作为后端服务,开放一个查询API,并将此API发布到RELEASE环境,以便调用。最后将此API绑定流控策略,进行流量控制,确保API可以提供持续稳定的服务。 什么是API网关?API网关(API Gateway)是为开发者、合作伙伴提供的高性能、高可用、高安全的API托管服务,帮助用户轻松构建、管理和部署任意规模的API。 为什么使用API网关?轻松构建、管理和部署任意规模的API。灵活自定义的流量控制策略制定,保障API服务的稳定和连续。提供多种API监控指标,更方便统计分析API服务情况。 二、  实践指南(1)实践资源说明:API网关服务仅对开放API的用户收费。开通服务、创建API、发布API、管理API免费。计费价格详情见:https://www.huaweicloud.com/pricing.html?tab=detail#/apig提示:本次实践建议使用APIG共享版,并选择“上海二”区域;实践费用预计:0元≤实践费用<1元。(2)最佳实践指南:https://support.huaweicloud.com/bestpractice-apig/apig-zh-bp-180606001.html(3)操作演示视频:https://education.huaweicloud.com:8443/courses/course-v1:HuaweiX+CBUCNXP021+Self-paced/courseware/7212ae2f2e0e4fb68b67e37171399a39/5429e751ef9f44a698f453651c7f9eb1/(4)APIG基础课程:《API网关:助力API经济》 三、  闯关任务任务一:创建API分组、创建API,并将API详情页“总览”截图,截图需包含右上角华为云账号名,并按回帖格式要求在本帖中回帖;奖励:100码豆(可用于兑换DevCloud会员中心实物好礼); 任务二:根据实践指南完成实践操作,将调试截图,将URL结果截图,并按回帖格式要求在本帖中回帖;奖励:本期闯1关可参与抽取“荣耀手环4 Running版”;闯2关可参与抽取“华为背包”;详见FAQ评奖规则  四、  回帖格式请务必按照以下格式要求进行回帖,否则无法计算奖励:华为云账号名:XXX(即右上角的字母数字组合ID)微信昵称:XXX实践感想:XXX实践截图:至少包含(a)API详情页总览截图、(b)调试结果截图、(c)调用API截图、(d)监控数据截图,共 4 张截图。例1-API详情页“总览”:例2-调试结果:例3-调用API:例4-监控数据:附各关卡快速入口:第1关任务:基于API网关的电话号码归属地查询第2关任务:使用函数工作流服务为图片打水印第3关任务:使用Redis实现排行榜功能第4关任务:使用DMS Kafka优化消费者poll第5关任务:使用CPTS进行电商网站性能测试
  • [技术干货] 通过Edge Service转发rest api,返回数据异常
    通过Edge Service连续转发Rest Api, 返回实体中某个key对应的value,间歇性丢失第1次调用第2次调用
  • [技术干货] 教你一招:如何快速上手API Studio?
    1 工具概述API Studio基于iMaster NCE提供的北向开放能力,为广大开发者提供场景化的API调用示例和Restful接口调测环境。API Studio功能概述如下:提供设置API参数的可视化界面。支持拖拽公共组件和API组件构建成场景化API调用的流程图。支持用户推送模板。用户可将自己设计的流程推送到管理员。管理员将此作为公共模板发布后,其他开发者可共享。支持用户导出基于某个流程的Java代码示例。支持导入本地流程/导出流程到本地。支持导出流程运行结果到本地。工具体验地址:https://devzone.huawei.com/flowchart/index.jsp2 快速上手API Studio介绍API Studio的基本操作流程,帮助您快速上手API Studio。注册账号进入API Studio工具,在账号登录页面,单击“免费注册”。设置手机号并单击“获取短信验证码”。该手机号未注册过华为云账号,或已注册过华为云账号,但账号数量未达到系统允许的最大数量。输入短信验证码、密码并勾选“我已阅读并同意《华为云用户协议》和《隐私政策声明》”。该手机号已注册过华为云账号,且账号数量已达到系统允许的最大数量将不支持再使用该手机号注册新的华为云账号。单击“同意协议并注册”。账号提示注册成功。        编排流程场景化API调用流程示例:查询站点site1,若存在则查询site1站点下的设备列表,若不存在则创建站点site1。下面以该示例说明流程编排步骤:拖动左侧组件到中间流程编辑面板。如图2-1所示,拖动左侧开始组件至流程编辑面板,其余组件类似操作。图2-1 拖动组件示例图单击组件,然后单击并拖动至目的组件进行连接。双击连接线可对其进行命名。单击组件后,在右侧参数设置面板的label字段中可对组件进行重命名。设置“查询站点”参数信息。outbound为节点响应结果别名,供目的节点调用。这里设置为getsite。name为站点名称,是查询站点接口的请求参数。这里设置为site1。单击“查看Yaml文件”,可查看接口的详情信息,包括典型场景、接口功能、接口约束、请求和响应参数。设置“boolean”参数信息。左值leftParam为判断参数值。这里leftParam设置为${getsite.response.data.0.name},表明需要作出判断的参数取自getsite的name值,即调用查询站点接口后返回的站点名称。${getsite.response}为调用查询站点接口返回值:{   "errcode": "200",        "errmsg": "",       "totalRecords": 2,        "pageIndex": 0,       "pageSize": 20,       "data": [            {               "id": "ec083842-2471-4bcb-a329-0730b7cc5500",        "tenantId": "",            "name": "site1",               "description": "description1",           "type": [                "AP"          ]           }        ]  }则${getsite.response.data.0.name}取值为模糊查询后符合条件的第一个name值。若返回值有多个,可使用${getsite.response.data.?.name}取所有的name值。右值rightParam为目标参数值。这里设置为site1。oper为判断条件。这里设置为“=”,若leftParam=rightParam,流程运行true分支。否则,流程运行false分支。设置“查询设备”参数信息。outbound设置为getdevice。siteId为站点ID,可查询该站点下的设备列表。这里设置为${getsite.response.data.0.id},取自查询站点接口返回的站点ID。设置“创建站点”参数信息。outbound设置为createsite。单击“编辑”设置body参数。单击“拓扑属性”,填写必填字段网络协议、IP地址和端口号。如果需要自定义字段,可输入名称和值后单击添加。勾选“是否显示”后,可在界面显示拓扑属性页签。拓扑属性设置完成后,单击“应用”。单击“文件 > 保存”,或者按快捷键“Ctrl+S”。单击右上角菜单栏“运行视图”,切换至运行视图。单击“运行”。组件变为绿色代表运行通过,红色代表运行出错,黄色代表该API无法运行。单击“导出 > 导出运行结果”。填写文件名称,选择流程图名称、开始和结束时间后,单击“确定”。若开始和结束时间为空,则导出所有时间段执行的运行结果。查看运行结果。3 通用操作介绍API Studio的通用操作,帮助您了解更多API Studio使用技巧。导入工程文件导入本地的.apis工程文件后,打开已有的场景化API调用的流程图。单击“文件 > 导入工程文件”。在“导入工程文件”弹出框中,单击“文件选择”。导入.apis文件后,单击“导入”。导出工程文件保存已编排的流程后,支持导出该流程的.apis工程文件到本地。单击“文件 > 导出工程文件”。2. 提示“导出成功!”弹出框中,单击“确定”。导入流程图已保存的流程图都存放在工作空间中,支持获取工作空间中已保存的流程图。单击“文件 > 从工作空间导入”。单击操作列的,打开工作空间中保存的流程图。导出静态配置支持导出流程的html配置页面信息。单击“文件 > 导出静态配置”,导出为html.zip文件。下载到本地并解压后,双击index.html文件,打开流程编辑页面。导出运行结果流程运行完成后,支持导出运行结果到本地。单击“导出 > 导出运行结果”。填写文件名称,选择流程图名称、开始和结束时间后,单击“确定”。导出代码支持导出基于某个流程的Java代码示例。单击“导出 > 导出代码”。推送模板用户可将自己设计的流程推送到管理员。管理员将此作为公共模板发布后,其他开发者可共享。单击“模板管理 > 推送模板”。在“模板推送成功”提示页面,单击“确定”。管理员审核通过后,该流程可在“模板管理 > 模板列表”中查看。
  • [问题求助] 请问python api接口什么时候能推出,能否推出一个类似sample-pythonclassifyDemo的object
    请问python api接口什么时候能推出,能否推出一个类似sample-pythonclassifyDemo的目标检测的python样例程序
  • [技术干货] 【基于小熊派IoT开发套件的LiteOS内核实战教程】03 | 任务管理(超简洁API,一行代码创建任务)
    >本文首发于公众号『小熊派开源社区』,关注即可接收小熊派IoT教程的最新推送! ![小熊派开源社区](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/201911/29/171129bumc6cltvv3gh4sg.png) # 1. LiteOS内核的任务管理 Huawei LiteOS 内核提供任务的创建、删除、延迟、挂起、恢复等功能,以及锁定和解锁任务调度,支持任务按优先级高低的抢占调度及同优先级时间片轮转调度。 ## 1.1. 任务 在 LiteOS 中,一个任务就是一个线程,多个任务按照优先级进行抢占式调度,达到多个任务“同时”运行的目的。 ## 1.2. 任务的状态 Huawei LiteOS 系统中的**每个任务都有多种运行状态**。当系统初始化完成并启动调度器后,系统中所有创建的任务就由内核进行调度,在不同运行状态之间切换,同时在系统中竞争一定的资源。 任务的状态有以下四种: - 就绪(Ready):该任务在就绪列表中,只等待 CPU; - 运行(Running):该任务正在执行; - 阻塞(Blocked):该任务不在就绪列表中。包含任务被挂起、任务被延时、任务正在等待信号量、读写队列或者等待读写事件等; - 退出态(Dead):该任务运行结束,等待系统回收资源。 ## 1.3. 任务ID 任务 ID **在任务创建时通过参数返回给用户,作为任务的一个非常重要的标识**。 用户可以通过任务ID对指定任务进行任务挂起、任务恢复、查询任务名等操作。 ## 1.4. 任务优先级 优先级表示**任务执行的优先顺序**。任务的优先级决定了在发生任务切换时即将要执行的任务,在就绪列表中的最高优先级的任务将得到执行。 Huawei LiteOS 的任务一共有 32 个优先级 (0-31),最高优先级为 0,最低优先级为 31。 因为是LiteOS的内核是抢占式调度内核,所以: **高优先级的任务可打断低优先级任务,低优先级任务必须在高优先级任务阻塞或结束后才能得到调度**。 ## 1.5. 任务入口函数 任务入口函数是**每个新任务得到调度后将执行的函数**,该函数由用户实现,在任务创建时,通过任务创建结构体指定。 ## 1.6. 多任务运作背后的机制 在多任务操作系统的内核中,为了方便对每个任务进行管理,每一个任务都有一个任务控制块(TCB),其中包含了任务上下文栈指针(stack pointer)、任务状态、任务优先级、任务ID、任务名、任务栈大小等信息,**TCB 相当于每个任务在内核中的身份证,可以反映出每个任务运行情况**。 那么,操作系统中这么多的任务,它们依靠TCB被系统统一管理,那么又是如何被系统执行的呢? 其实,每个任务相当于一个裸机程序,每个任务之间相互独立,这个“独立”指的是每个任务都有自己的运行环境 —— 栈空间,称为**任务栈**,栈空间里保存的信息包含局部变量、寄存器、函数参数、函数返回地址等。 可是,系统中只有一个CPU,即使每个任务的任务栈是独立的,可是多个任务都需要被同一个CPU所执行,CPU的资源是共用的吧。 对的,CPU的资源是多个任务共用的,这些CPU的寄存器**只有在任务执行的时候被使用**,称为**任务上下文**,因此,内核在任务切换时会将切出任务的上下文信息保存在自身的任务栈空间里面,以便任务恢复时还原现场,从而在任务恢复后在切出点继续开始执行。 用户创建任务时,系统会先申请任务控制块需要的内存空间,申请成功后,系统会将任务栈进行初始化,预置上下文。此外,系统还会将“任务入口函数”地址放在相应位置。这样在任务第一次启动进入运行态时,将会执行“任务入口函数”。 # 2. 任务管理API Huawei LiteOS 任务管理模块提供任务创建、任务删除、任务延时、任务挂起和任务恢复、更改任务优先级、锁任务调度和解锁任务调度、根据任务控制块查询任务 ID、根据 ID 查询任务控制块信息功能。 Huawei LiteOS 任务管理提供的 API 都是以 `LOS` 开头,但是这些 API 使用起来比较复杂,所以本文中我们使用 Huawei IoT Link SDK 提供的统一API接口进行实验,这些接口底层已经使用 LiteOS 提供的API实现,对用户而言更为简洁,API列表如下: osal的api接口声明在中,使用相关的接口需要包含该头文件,关于函数的详细参数请参考该头文件的声明。 任务相关的接口定义在`osal.c`中,基于LiteOS的接口实现在 `liteos_imp.c`文件中: | 接口名 | 功能描述 | | :----------------: | :------------------------------------: | | osal_task_create | 创建任务 | | osal_task_kill | 删除任务(非自身) | | osal_task_exit | 任务退出 | | osal_task_sleep | 任务休眠 | ## 2.1. osal_task_create `osal_task_create`的接口用于创建一个任务,其接口原型如下: ```c void* osal_task_create(const char *name,int (*task_entry)(void *args),\ void *args,int stack_size,void *stack,int prior) { void *ret = NULL; if((NULL != s_os_cb) &&(NULL != s_os_cb->ops) &&(NULL != s_os_cb->ops->task_create)) { ret = s_os_cb->ops->task_create(name, task_entry,args,stack_size,stack,prior); } return ret; } ``` 该接口的参数说明如下表: |参数名称|参数说明| |:-----:|:-----:| |name|任务名称| |tsak_entry|任务入口函数的函数指针| |args|任务入口函数的参数列表| |stack_size|任务栈大小| |stack|任务栈地址| |prior|任务优先级| |返回值|任务ID| ## 2.2. osal_task_kill `osal_task_kill`用于删除某个其他任务(非自身),其接口原型如下: ```c int osal_task_kill(void *task) { int ret = -1; if((NULL != s_os_cb) &&(NULL != s_os_cb->ops) &&(NULL != s_os_cb->ops->task_kill)) { ret = s_os_cb->ops->task_kill(task); } return ret; } ``` 该接口的参数说明如下表: |参数名称|参数说明| |:-----:|:-----:| |task|任务ID| |返回值|0-删除成功| |返回值|-1-删除失败| ## 2.3. osal_task_exit `osal_task_exit`接口用于任务退出(自身),**目前暂未支持,可以直接return退出**。 ## 2.4. osal_task_sleep `osal_task_sleep`接口用于任务主动休眠,单位是ms,其接口原型如下: ```c void osal_task_sleep(int ms) { if((NULL != s_os_cb) &&(NULL != s_os_cb->ops) &&(NULL != s_os_cb->ops->task_sleep)) { s_os_cb->ops->task_sleep(ms); } return ; } ``` # 3. 动手实验 —— 体验任务的创建与切换 ## 实验内容 本实验中将创建两个任务,一个低优先级任务task1,一个高优先级任务task2,两个任务都会每隔2s在串口打印自己的任务id号,在串口终端中观察两个任务的运行情况。 ## 实验代码 首先打开之前创建的 HelloWorld 工程,基于此工程进行实验。 在`Demo`文件夹右击,选择新建文件夹: ![](http://mculover666.cn/blog/20191129/yzGlJYzR2oeP.png?imageslim) 新建`osal_kernel_demo`文件夹,用于存放内核的实验文件: ![](http://mculover666.cn/blog/20191121/tHvJHeO7yD4e.png?imageslim) 接下来在此`osal_kernel_demo`文件夹中新建第一个实验文件`osal_task_demo.c`文件,开始编写代码: ![](http://mculover666.cn/blog/20191129/F6QOPkC2A1Wn.png?imageslim) ```c /* 使用osal接口需要包含该头文件 */ #include /* 任务优先级宏定义(shell任务的优先级为10) */ #define USER_TASK1_PRI 12 //低优先级 #define USER_TASK2_PRI 11 //高优先级 /* 任务ID */ uint32_t user_task1_id = 0; uint32_t user_task2_id = 0; /* 任务task1入口函数 */ static int user_task1_entry() { int n = 0; /* 每隔2s在串口打印一次,打印5次后主动结束 */ for(n = 0; n < 5; n++) { printf("task1: my task id is %ld, n = %d!\r\n", user_task1_id, n); /* 任务主动挂起2s */ osal_task_sleep(2*1000); } printf("user task 1 exit!\r\n"); /* 任务结束 */ return 0; } /* 任务task2入口函数 */ static int user_task2_entry() { /* 每隔2s在串口打印一次,不结束 */ while (1) { printf("task 2: my task id is %ld!\r\n", user_task2_id); /* 任务主动挂起2s */ osal_task_sleep(2*1000); } } /* 标准demo启动函数,函数名不要修改,否则会影响下一步实验 */ int standard_app_demo_main() { /* 创建任务task1 */ user_task1_id = osal_task_create("user_task1",user_task1_entry,NULL,0x400,NULL,USER_TASK1_PRI); /* 创建任务task2 */ user_task2_id = osal_task_create("user_task2",user_task2_entry,NULL,0x400,NULL,USER_TASK2_PRI); return 0; } ``` 编写完成之后,要将我们编写的`osal_task_demo.c`文件添加到makefile中,加入整个工程的编译: 这里有个较为简单的方法,直接修改`Demo`文件夹下的`user_demo.mk`配置文件,添加如下代码: ``` #example for osal_task_demo ifeq ($(CONFIG_USER_DEMO), "osal_task_demo") user_demo_src = ${wildcard $(TOP_DIR)/targets/STM32L431_BearPi/Demos/osal_kernel_demo/osal_task_demo.c} user_demo_defs = -D CONFIG_OSAL_TASK_DEMO_ENABLE=1 endif ``` 添加位置如图: ![](http://mculover666.cn/blog/20191129/g3Tez1mvUzNR.png?imageslim) 这段代码的意思是: 如果 CONFIG_USER_DEMO 宏定义的值是`osal_task_demo`,则将`osal_task_demo.c`文件加入到makefile中进行编译。 那么,如何配置 CONFIG_USER_DEMO 宏定义呢?在工程根目录下的`.sdkconfig`文件中的末尾即可配置: ![](http://mculover666.cn/blog/20191129/d3M6u3Fh5YBI.png?imageslim) ![](http://mculover666.cn/blog/20191129/IguOlDWr4M4W.png?imageslim) 因为我们修改了mk配置文件,所以点击重新编译按钮![](http://mculover666.cn/blog/20191121/CfUb4vtVJ0pJ.png?imageslim)进行编译,编译完成后点击下载按钮烧录程序。 ## 实验现象 程序烧录之后,即可看到程序已经开始运行,在串口终端中可看到实验的输出内容: ``` **Link**main:V1.2.1 AT 11:30:59 ON Nov 28 2019 WELCOME TO IOT_LINK SHELL LiteOS:/>task 2: my task id is 5! task1: my task id is 4, n = 0! task 2: my task id is 5! task1: my task id is 4, n = 1! task 2: my task id is 5! task1: my task id is 4, n = 2! task 2: my task id is 5! task1: my task id is 4, n = 3! task 2: my task id is 5! task1: my task id is 4, n = 4! task 2: my task id is 5! user task 1 exit! task 2: my task id is 5! …… ``` 可以看到,系统启动后,首先打印版本号,串口shell的优先级为10,最先打印shell信息,接下来task1先创建,但是优先级较低,所以后创建的task2抢占执行,task2打印后主动挂起2s,这时task1开始执行,依次执行5次后task1结束,task2一直保持运行。
  • [产品体验官] 体验官有奖体验第15期|华为云API Explorer体验及评测--By 陈晓
    本次体验我被分派的是B任务,体验华为云产品再体验阿里云产品,相关测评报告都输出再PPT中,请各位小伙伴指出不足,多多交流奥