tag 标签: 开源软件

相关博文
  • 2024-10-10 14:42
    71 次阅读|
    0 个评论
    01 概述 TCP协议广泛应用于可靠性要求较高的应用场景,如网页浏览、文件传输、电子邮件等。它提供了可靠的数据传输和流控制机制,能够确保数据的完整性和有序性。然而,由于TCP协议在传输过程中引入了较多的控制信息,因此相比于UDP协议,TCP的传输速度较慢。 02 功耗的组成 低功耗技术就是一系列的降低功耗的技术。 在了解低功耗技术之前,我们必须先了解功耗的构成。 一个SOC芯片的功耗由两部分组成:动态功耗和静态功耗。 动态功耗是设备运行时或者说信号改变时所消耗的功耗; 静态功耗是设备上电但是信号没有改变时所消耗的功耗; 这里要注意的是:在设备运行时,也需要消耗静态功耗的,因为设备运行时也是上电状态。功耗分类把静态功耗单独拿出来,只是为了理论分析方便。 2.1 动态功耗 动态功耗可以分为: 1. 翻转功耗(有的地方称为开关功耗,但是笔者认为这个名字不准确,因为开关包含的功耗很多,其实是从英文switching power翻译过来,从switching可以看到,名称想表现是动作。所以称为翻转功耗比较准确) 2. 短路功耗(或者称为内部功耗,英文是internal power) 2.1.1 翻转功耗(switching power) Switching power 是一个门电路对输出电容进行充电和放电需要的功耗。简单的说就是一个门电路输出从0变到1和从1变到0所需要消耗的功耗。 Switching power 是动态功耗最主要的组成部分。 1. Switching power 和电压,翻转率,负载电容有关; 2. Switching power和数据无关,也就传输的数据不会影响翻转功耗,但是数据的翻转率会影响翻转功耗; 3. Switching power和传输的大小也无关 由这个公式我们很容易得到如果想减少功耗,那么方法就是: 1. 降低电压; 2. 降低翻转率; 3. 减少负载电容 当然,这些方法的前提永远是芯片的功能要满足要求。功率再低,功能不满足的芯片和板砖有什么区别,起码板砖还能拍人。 芯片的功能要满足要求这个基础就决定了这些方法有一些限制,比如不可能把电压降到0,不可能让信号永远不翻转,不可能电容减少到0。这些都是前提。 2.1.2 内部功耗(internal power) 内部功耗又可以称为短路功耗,因为主要原因是由于短路造成的。短路功耗是因为在输入信号进行翻转时,信号的翻转不可能瞬时完成,因此PMOS和NMOS不可能总是一个截止另外一个导通,总有那么一段时间是使PMOS和NMOS同时导通,那么从电源VDD到地VSS之间就有了通路,就形成了短路电流。 后面的部分就是短路功耗。tsc是短路电流持续的时间,Ipeak是总的短路电流(包含了内部电容充电的电流) 由于传输中短路持续的时间特别短,短路功耗相比翻转功耗来说小很多。所以一般情况下会忽略短路功耗,把翻转功耗就当作动态功耗。 但是值得注意的是,有的情况下,还是要考虑短路功耗,比如如何处理门控模块的悬空的输出的时候。 2.2 静态功耗 静态功耗是由于漏电流引起的,在CMOS 门中,漏电流主要来自4个源头: 1. 亚阈值漏电流(Sub-threshold Leakage, ISUB): 亚阈值泄漏电流是晶体管应当截止时流过的电流. 2. 栅极漏电流(Gate Leakage, Igate): 由于栅极氧化物隧穿和热载流子注入,从栅极直接通过氧化物流到衬底的电流。 3. 栅极感应漏电流(Gate Induced Drain Leakage, IGIDL): 结泄漏电流发生在源或漏扩散区处在与衬底不同电位的情况下。结泄漏电流与其他泄漏电流相比时通常都很小。 4. 反向偏置结泄漏(Reverse Bias Junction Leakage ,IREV):由少数载流子漂移和在耗尽区产生电子/空穴对引起。 2.2.1亚阈值漏电流(Sub-threshold Leakage) 亚阈值漏电流(Sub-threshold Leakage)发生在CMOS gate没有完全关断时。 VT是阈值电压;可以看到,阈值电压越高,漏电功耗就越低。但是阈值电压越高,对应的翻转速度就会越慢,延时就会越大,性能就越差。 1. 可以通过调整VDD/VT来降低漏电流,从而减少漏电功耗。 2. 增加VT会带来性能损失,只能在满足功能需求前提下增加VT; 3. ISUB只和VDD/VT有关,和信号翻转这些都没关系。这是一个工艺强相关的电流,RTL设计对其无影响。 亚阈值泄漏电流随温度呈指数增长(Vth)。这大大增加了设计低功率系统的复杂性。即使在室温下的泄漏是可以接受的,在最坏的情况下,温度会超过芯片的设计目标。 2.2.2栅极漏电流(Gate Leakage) 栅极泄漏电流发生在一个电压加到栅上时(例如当门导通时)载流子遂穿通过薄栅介质的情况下。 泄漏电流与介质厚度有极强的关系。工艺中通过选择合适厚度的介质将栅泄漏电流限制到一个可接受的水平上。泄漏电流还取决于栅极电压。通过使晶体管堆叠起来并使截止晶体管靠近电源/地线可以使栅泄漏电流减小。 在以往的技术节点中,漏电电流一直以亚阈值漏电为主。但是从90nm开始,门极漏电几乎是亚阈值漏电的1/3。在某些情况下,在65nm工艺下,它可以等于亚阈值泄漏。低于65nm,high-k介电材料必须进行保持门级泄漏电流检查,这似乎是唯一有效减少门泄漏电流的方法。 其他两种流电流占比比较小,所以一般不做分析。 Ipeak为泄露电流,减少静态功耗的方法就是减小VDD和Ipeak。 2.3 不同结构的功耗组成 SOC中不同结构的对功耗的消耗是不一样的。有几个功耗大户如下: 1. 时钟树功耗:时钟树的功耗通常占整个SOC功耗的40%左右,这是因为时钟是一直在翻转的信号,所以动态功耗特别大。所以门控时钟技术就特别重要。 2. CPU: CPU是SOC主控制器,工作时CPU一般都必须要打开,随着CPU频率越来越高,功耗也越来越大。所以现在的多核,大小核就比较流行,不同场景下用不同功耗的CPU核; 3. GPU: GPU是并行处理单元,由于其算力主要来自多个模块并行计算,为了正常工作,通常需要很多模块同时运算,功耗也很大,所以很多SOC都不带GPU或者默认关掉; 4. 存储器:DDR这些存储器作为SOC主存也需要时刻使用,也是功耗消耗的大户。 SOC还有其他模块,但是时钟树,CPU/GPU, 存储器占了绝大部分的功耗。在AI芯片的时代,CCN IP也是功耗的主要来源,和GPU比较类似。 03 组件的使用 1 Gitee链接地址 Demo位于amaziot_bloom_os_sdk\sample\libraries\5.19-app_low_power Gitee源码地址:https://gitee.com/ning./hongdou Github源码地址:https://github.com/ayumid/hongdou 编译指令:.\build.bat -l .\amaziot_bloom_os_sdk\sample\libraries\5.19-app_low_power 2 组件功能介绍 组件实现了 TCP 通信下的低功耗。 设备上电后会连接 TCP 服务器,之后发送登录字符串“login”,服务器回复字符串“login_resp”后,设备会进入低功耗状态。低功耗状态下,设备每隔60s会给服务器发送心跳字符串“heart”。当设备在低功耗状态下,服务器发送“wakeup”,设备会唤醒。服务器发送“suspend”,设备会重新进入低功耗。测试平均功耗大概是5mA左右(参考下方固件测试图)。 组件提供一个GPIO控制,如果硬件设计中是MCU+AM430EV5,通过这个IO,可以唤醒MCU。 3 代码讲解 1 low_power_gpio_init 功能:该函数用于,组件提供的用于唤醒主控MCU的GPIO。 参数:无 返回值:无 示例: low_power_gpio_init(); 2 low_power_gpio_out 功能:该函数用于,GPIO输出,用于适当的时间唤醒主控MCU。 参数: 参数 释义 val 输出电平 返回值:0 示例: low_power_gpio_out(1) 3 low_power_send_msg 功能:该函数用于,发送消息给主任务。 参数: 参数 释义 msgId 消息ID extra 按需使用,额外信息 data 按需使用,额外数据 返回值:无 示例: low_power_send_msg(LOW_POWER_CMD_SUSPEND, 1, NULL); 4 low_power_set_mcu_wake 功能:该函数用于,唤醒mcu。 参数: 参数 释义 ad 消息指针 wake gpio输出状态 返回值:无 示例: low_power_set_mcu_wake(ad, 1); 5 low_power_wakeup_internal 功能:该函数用于,关闭网络连接。 参数: 参数 释义 ad 消息指针 返回值:文件指针 示例: low_power_net_close(ad); 6 low_power_net_send 功能:该函数用于,发送数据。 参数: 参数 释义 ad 消息指针 data 数据指针 sz 数据长度 返回值:无 示例: low_power_net_send(); 7 low_power_net_init 功能:该函数用于,发送数据。 参数: 参数 释义 ad 消息指针 返回值:无 示例: low_power_net_init(ad); 8 low_power_net_connect 功能:该函数用于,连接服务器。 参数: 参数 释义 ad 消息指针 fd 套接字描述符 data 数据指针 sz 数据长度 返回值:无 示例: ai_addrlen); 9 low_power_net_create 功能:该函数用于,发送数据。 参数: 参数 释义 ad 消息指针 返回值:无 示例: low_power_net_create(ad); 10 low_power_net_recv 功能:该函数用于,接收服务器信息。 参数: 参数 释义 ad 消息指针 返回值:无 示例: ret = low_power_net_recv(ad); 11 low_power_task 功能:该函数用于,主任务。 参数: 参数 释义 param 任务参数指针,可不用 返回值:无 示例: low_power_task(); 12 low_power_config 功能:该函数用于,配置低功耗相关的信息。 参数: 参数 释义 ad 消息指针 返回值:无 示例: low_power_config(); 13 low_power_init 功能:该函数用于,初始化低功耗需要的资源,任务等。 参数:无 返回值:无 示例: low_power_init(); 4 Demo实战 4.1 创建一个Demo 复制4.2_hal_UART示例工程,到同一个文件夹下,修改文件名为5.19-app_low_power,如图: 4.2 修改makefile 增加文件组件所在目录头文件路径,和源文件路径,如图: 4.3 增加头文件 使用代码编辑器,将新建的工程文件加入代码编辑器中,打开main.c,修改main.c,加入am.h等头文件,如图: 4.4 修改代码 在Phase2Inits_exit 调用低功耗初始化函数,如图: 4.5 宏定义介绍 low_power_uart_printf 输出日志到DEBUG 串口,日志比较少,可以输出到这个串口,如果日志比较多,需要输出到usb口,以免不必要的问题出现 low_power_catstudio_printf 输出日志到USB 串口,使用catstudio查看,catstudio查看日志需要更新对应版本mdb.txt文件,软件打开filtter过滤日志,只查看用户输出的日志 LOW_POWER_TASK_STACK_SIZE 栈空间宏定义 4.6 函数介绍 Phase1Inits_enter 底层初始化,本例空 Phase1Inits_exit 底层初始化,本例空 Phase2Inits_enter 底层初始化,本例空 Phase2Inits_exit 创建主任务,初始化消息队列,定时器,任务等。 代码片段: enter main\n"); ret = OSAFlagCreate(&sample_ele_log_flag_ref); ASSERT(ret == OS_SUCCESS); ret = OSATimerCreate(&sample_ele_log_timer_ref); ASSERT(ret == OS_SUCCESS); ret = OSATaskCreate(&sample_ele_log_task_ref, sample_ele_log_task_stack, SAMPLE_ELE_LOG_TASK_STACK_SIZE, 200, "filetest-task", sample_ele_log_task, NULL); ASSERT(ret == OS_SUCCESS); OSATimerStart(sample_ele_log_timer_ref, 5 * 200, 5 * 200, sample_ele_log_timer_callback, 0); // 3 seconds timer sample_ele_log_timer_callback 定时器回调函数,发送事件给主任务。 代码片段: OSAFlagSet(sample_ele_log_flag_ref, SAMPLE_ELE_LOG_TASK_TIMER_CHANGE_FLAG_BIT, OSA_FLAG_OR); sample_ele_log_task 日志写入任务,由事件驱动,这里5s一次。 代码片段: open file for write error\n"); } } 4.7 编译 在SDK根目录打开命令行,输入命令.\build.bat -l .\amaziot_bloom_os_sdk\sample\libraries\8.5_ele_log\ 4.8 生成固件 参考入门中开发工具,生成工具。 4.9 测试 测试步骤: 参考编译教程,和文档开头的编译指令,进行编译 按照编译教程选择对应的选项 烧录 4.10 固件 TCP连接 60s一次心跳,测试1小时; 本文章源自奇迹物联开源的物联网应用知识库Cellular IoT Wiki,更多技术干货欢迎关注收藏Wiki: Cellular IoT Wiki 知识库(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf) 注:本文部分内容来源于网络,如有侵权,请及时联系我们。
  • 2024-10-10 14:32
    102 次阅读|
    0 个评论
    01 概述 物联网开发场景中,大多数情况下是一台服务器对应很多台设备。大量的设备定时和服务器进行通信,会产生高并发,服务器处理不及时,可能会产生丢包等问题。因此,需要有一种机制,让设备分散上报,减轻服务器的压力。 本组件适合TCP等传统的通信方式。MQTT等服务器端如果做了消息队列这种处理,设备端可以不用考虑高并发。 02 高并发 高并发是指系统或应用程序在同一时间段内接收到大量并发请求的能力。具体来说,高并发环境下系统需要能够同时处理大量的请求,而不会出现性能问题或响应延迟。 大量请求: 高并发场景下,系统需要同时处理大量的请求,这些请求可能来自于不同的用户或客户端。 同时访问: 这些请求几乎同时到达系统,需要在短时间内进行处理和响应。 资源竞争: 由于大量请求同时到达,系统的资源(如CPU、内存、网络带宽等)可能会面临竞争和争夺。 响应时间要求高: 高并发场景通常对系统的响应速度有较高的要求,用户期望能够快速获取响应结果。 03 应对策略 1 服务器端 负载均衡 负载均衡是指将多台服务器组成一个集群,通过某种策略将访问请求均匀地分发到各个服务器上,使每个服务器的负载均衡。负载均衡可以提高系统的可用性和性能。 缓存 缓存是将数据存储在高速缓存中,以便在需要时快速访问。缓存可以减少数据库的读写操作,从而提高系统的性能。可以使用内存缓存、分布式缓存等方式实现缓存功能。 数据库优化 数据库是高并发系统的瓶颈之一,因此对数据库进行优化是解决高并发问题的重要方法。可以通过分库分表、索引优化、SQL优化等方式来提高数据库的性能。 异步处理 异步处理是将处理请求放入消息队列中,由后台进程或线程异步处理,从而避免了同步处理带来的性能瓶颈。异步处理可以使用消息队列、定时任务等方式实现。 分布式架构 分布式架构是将系统拆分成多个独立的子系统,每个子系统都可以独立运行,从而提高系统的可扩展性和可用性。分布式架构可以使用微服务、分布式缓存等方式实现。 高并发是互联网应用面临的一个重要问题,需要采取一系列措施来解决。负载均衡、缓存、数据库优化、异步处理和分布式架构是解决高并发问题的主要方法。 在实际应用中,需要根据具体情况选择不同的方法来解决高并发问题。在高并发情况下,使用负载均衡是解决问题的一种常见方法。 负载均衡可以通过将请求分配到多个服务器上,从而减少单个服务器的负载。这可以通过硬件设备或软件实现。在选择负载均衡器时,需要考虑多种因素,包括负载均衡算法、可靠性、安全性、性能和成本等。负载均衡算法是负载均衡器的关键组成部分之一。 负载均衡算法的选择会影响到服务器的响应时间、可用性和负载均衡的效率等因素。 常见的负载均衡算法包括轮询、加权轮询、最少连接、IP散列和URL散列等。每种算法都有其优缺点,需要根据具体的业务场景进行选择。 在高并发情况下,缓存也是提高性能的有效方法之一。 缓存可以将常用的数据存储在内存中,从而避免每次都去查询数据库,从而提高响应速度和并发能力。 常见的缓存方案包括本地缓存和分布式缓存。本地缓存是指将数据存储在应用服务器的内存中,而分布式缓存则是将数据存储在多个服务器上,从而实现更高的可靠性和可扩展性。 此外,在高并发情况下,需要优化数据库的性能,以避免成为瓶颈。数据库优化的方法包括使用索引、合理设计数据库表结构、优化SQL查询语句、使用分库分表等。这些方法可以提高数据库的响应速度和并发能力,从而保证系统的稳定性和可靠性。 针对不同的业务场景,还可以采用其他的技术方案来解决高并发问题。例如,使用消息队列解耦系统各个组件之间的依赖关系,从而提高系统的可扩展性;使用异步处理机制将耗时的操作放在后台进行,从而提高系统的响应速度等。 在高并发的环境下,需要综合考虑多种技术手段来解决问题。从负载均衡、缓存、数据库优化到消息队列等方面入手,才能实现系统的高性能和高可用性。 高并发情况下的系统性能瓶颈分析可以采用性能分析工具,例如 JProfiler、VisualVM 等,这些工具可以帮助开发者定位代码中的性能问题,分析线程和内存使用情况,从而优化系统性能。 此外,还可以采用分布式系统架构来解决高并发问题。分布式系统是将系统中的不同模块分离出来,分别部署在不同的服务器上,通过网络协议进行通信,以此提高系统的并发处理能力。在分布式架构中,可以采用负载均衡技术,将请求均匀地分发到不同的服务器上,从而避免单一服务器出现瓶颈。 针对高并发场景下的数据访问问题,可以采用缓存技术,将热点数据缓存在内存中,从而加速数据的访问速度。常用的缓存技术有 Redis、Memcached 等,它们能够有效地减轻数据库的负担,提高系统的并发处理能力。 针对高并发场景下的安全问题,需要采用一些安全防护措施,例如限流、熔断、防火墙等,防止系统受到恶意攻击或者大量无效请求的干扰。同时,需要对系统进行定期的安全评估和漏洞扫描,及时修补安全漏洞,确保系统的稳定和安全。 综上所述,高并发场景下的系统性能优化需要综合考虑多个方面,包括代码优化、分布式系统架构、缓存技术、安全防护措施等。只有在各个方面都得到充分的考虑和优化,才能够构建出稳定、高效、安全的高并发系统。 当然,在进行高并发优化时,也需要注意安全性问题。例如,防止恶意攻击、防止SQL注入、防止DDoS攻击等等。因此,在进行高并发优化时,也需要考虑安全性问题,并采取相应的安全措施。 高并发优化是一个复杂的过程,需要从多个方面入手。从架构层面优化,例如采用分布式架构、缓存技术等等;从代码层面优化,例如采用异步编程、使用多线程技术等等;从数据库层面优化,例如采用数据库分库分表、使用读写分离等等。当然,在进行高并发优化时,也需要注意安全性问题,并采取相应的安全措施。 2 设备端 对于定时定点上报的场景,设备尽可能在定时的时刻左右偏移一些时间上报,减轻服务器压力,本文描述的就是设备端偏移时间随机产生的方法。 04 设备随机上报组件的使用 1 Gitee链接地址 Demo位于amaziot_bloom_os_sdk\sample\libraries\8.6_random Gitee源码地址:https://gitee.com/ning./hongdou Github源码地址:https://github.com/ayumid/hongdou 编译指令:.\build.bat -l .\amaziot_bloom_os_sdk\sample\libraries8.6_random 2 组件功能介绍 随机上报组件,利用系统ticks和时间戳进行整出取余运算,余数作为一个随机数,随机数可以通过调用函数中的形参传递来确定范围。 随机数可以用来设置定时器定时时间,或者作为其它用途。 3 代码讲解 1 lib_random_systick_get 功能:该函数用于,通过系统ticks取余来获取一个随机数。 参数: 参数 释义 residual 除数,ticks除以这个数后的余数,返回给调用函数 例如61 % 60 = 1, 随机数就是1 156 % 120 = 36 随机数就是36 返回值:无 示例: lib_random_systick_get(121); 2 lib_random_timestamp_get 功能:该函数用于,通过系统时间戳取余来获取一个随机数。 参数: 参数 释义 residual 除数,ticks除以这个数后的余数,返回给调用函数 例如1724741112 % 60 = 12, 随机数就是1 1724741153 % 120 = 113 随机数就是113 返回值:0 示例: air_sw_log_write_data(1111.1111) 3 lib_random_timer_callback 功能:该函数用于,定时器回调函数,产生事件,给调用文件中的任务使用。 参数:无 返回值:无 示例: OSATimerStart(lib_random_timer_ref, random_num * 200, 0, lib_random_timer_callback, 0); //随机时间 一个系统ticks是50ms,200个就是1s 4 lib_random_event_flg_init 功能:该函数用于,事件标志位初始化。 参数:无 返回值:无 示例: lib_random_event_flg_init(); 5 lib_random_timer_init 功能:该函数用于,上报定时器初始化。 参数:无 返回值:文件指针 示例: lib_random_timer_init(); 6 lib_random_timer_start_random_systick 功能:该函数用于,开始上报定时器,使用系统ticks定时。 参数:无 返回值:无 示例: lib_random_timer_start_random_systick(60); 7 lib_random_timer_start_random_timestamp 功能:该函数用于,开始上报定时器,使用系统时间戳定时。 参数:无 返回值:无 示例: lib_random_timer_start_random_timestamp(60); 4 Demo实战 4.1 创建一个Demo 复制5.1_socket示例工程,到同一个文件夹下,修改文件名为8.6_random,如图: 4.2 修改makefile 增加文件组件所在目录头文件路径,和源文件路径,如图: 4.3 增加头文件 使用代码编辑器,将新建的工程文件加入代码编辑器中,打开main.c,修改main.c,加入am.h等头文件,如图: 4.4 修改代码 在Phase2Inits_exit 创建一个任务,如图: 4.5 宏定义介绍 sample_random_uart_printf 输出日志到DEBUG 串口,日志比较少,可以输出到这个串口,如果日志比较多,需要输出到usb口,以免不必要的问题出现 sample_random_catstudio_printf 输出日志到USB 串口,使用catstudio查看,catstudio查看日志需要更新对应版本mdb.txt文件,软件打开filtter过滤日志,只查看用户输出的日志 SAMPLE_RANDOM_TASK_STACK_SIZE 栈空间宏定义 4.6 全局变量介绍 sample_random_task_stack 任务栈空间,本例使用数组实现,用户在做项目时,可以预先估算下当先任务需要的大致栈空间,OS没有提供可以查看栈空间使用情况的API sample_random_task_ref 任务指针 4.7 函数介绍 Phase1Inits_enter 底层初始化,本例空 Phase1Inits_exit 底层初始化,本例空 Phase2Inits_enter 底层初始化,本例空 Phase2Inits_exit 创建主任务,初始化消息队列,定时器,任务等。 代码片段: int ret; //事件初始化 lib_random_event_flg_init(); //初始化上报定时器 lib_random_timer_init(); ret = OSATaskCreate(&sample_random_task_ref, sample_random_task_stack, SAMPLE_RANDOM_TASK_STACK_SIZE, 200, "test-task", sample_random_task, NULL); ASSERT(ret == OS_SUCCESS); //打开定时器,定时时间使用系统ticks,获取一个随机数 lib_random_timer_start_random_systick(60); sample_random_socket socket业务函数,连接服务器后随机时间发送“amaziot”字符串 代码片段: ai_protocol); if (sock ai_addrlen); if (ret < 0) { sample_random_uart_printf("sample_random_task: connect error"); close(sock); sock = -1; continue; } else { break; } } freeaddrinfo(result); if (sock < 0) { sample_random_uart_printf("sample_random_task: connect error"); return; } ret = send(sock, "amaziot", 7, 0); if (ret != 7) { sample_random_uart_printf("sample_random_task: send error"); close(sock); return; } close(sock); sample_random_task 接收组件发来的事件,触发一次,连接服务器并进行数据通信 代码片段: 150) { PM812_SW_RESET(); } } }while(0); while(1) { status = OSAFlagWait(lib_random_flag_ref, flag_mask, OSA_FLAG_OR_CLEAR, &flag_value, OSA_SUSPEND); ASSERT(status == OS_SUCCESS); sample_random_uart_printf("flag_value: %d", flag_value); if (flag_value & SAMPLE_RANDOM_TASK_TIMER_CHANGE_FLAG_BIT) { sample_random_socket(); //打开定时器,定时时间使用系统时间戳,获取一个随机数 lib_random_timer_start_random_timestamp(120); } } 4.8 编译 在SDK根目录打开命令行,输入命令.\build.bat -l .\amaziot_bloom_os_sdk\sample\libraries\8.6_random\ 1.270(MB)| |------------------------------------------------------------------------------------| cp_1606L.axf cp_1606L.bin cp_1606L.map gnumake: Leaving directory `F:/3.asr-b/cat.1-asr1606/1.software/BLOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF/amaziot_bloom_os_sdk/sample/libraries/8.6_random' "copy NEZHAC_CP_CNR_MIFI_TX.bin to ./ " 已复制 1 个文件。 4.9 生成固件 参考入门中开发工具,生成工具。 4.10 测试 测试步骤: 参考编译教程,和文档开头的编译指令,进行编译 按照编译教程选择对应的选项 烧录 4.11 固件 上电后,系统会随机时间上报,日志如下,日志中的时间为定时器定时随机时间; 本文章源自奇迹物联开源的物联网应用知识库Cellular IoT Wiki,更多技术干货欢迎关注收藏Wiki: Cellular IoT Wiki 知识库(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf) 注:本文部分内容来源于网络,如有侵权,请及时联系我们。
  • 2024-10-10 14:27
    61 次阅读|
    0 个评论
    01 概述 空气开关,又名空气断路器,是断路器的一种。是一种只要电路中电流超过额定电流就会自动断开的开关。空气开关是低压配电网络和电力拖动系统中非常重要的一种电器,它集控制和多种保护功能于一身。除能完成接触和分断电路外,尚能对电路或电气设备发生的短路、严重过载及欠电压等进行保护,同时也可以用于不频繁地启动电动机。 4G网络无线空气开关是一种结合了现代通信技术的断路器,它通过4G网络实现了无线远程控制功能,使得用户可以通过手机或其他智能设备对电路进行控制,包括开启、关闭以及监控电路的状态。这种空气开关不仅提供了远程控制的便利,还增加了电路的安全性和管理的灵活性。 4G空气开关的主要特点包括: 远程控制‌:用户可以通过4G网络,随时随地通过手机APP或其他智能设备对电路进行控制,无需近距离操作。 实时监控‌:能够实时监控电路的状态,包括电流、电压等参数,确保电路安全运行。 故障诊断‌:通过4G网络传输的数据,可以及时发现电路故障,提前预警,避免事故发生。 多种保护功能‌:具备短路保护、过载保护、失压保护等多种保护功能,确保电路和设备的安全。 02 4G空开日志功能 嵌入式开发场景中,数据上报非服务器,服务器进行存储。但有可能上报不上去,这种情况下,就需要设备本身具备一定的日志储存能力。本文中的电量数据,涉及到计费等后续需求。因此,不希望数据丢失,因此需要设备在本地保存数据,防止因为断网等因素,造成数据没有上报给服务器。 带电量计量的空开产品,设备提供给服务器的数据,包括电量信息和电量对应的时间信息。 1 电量数据 电量数据是浮点型数据,在嵌入式平台中,Float是4个字节。红豆版本硬件的Flash有限,因此,使用前需要考虑最多可以存储多少数据。 2 时间戳 每保存一个电量信息,会同时保存电量对应的时间点。服务器可以根据时间和电量画出用电量曲线,曲线可以直观地显示出,用户什么时候用电多,什么时候用电少。 03 组件的使用 注意:日志并非app上的按照年月日显示的日志。当前组件的作用是,提供本地的一些电量存储策略,应对正常上报,或者异常断电数据保存等 空间限制,本地电量日志只能保存有限的日志 1 Gitee链接地址 Demo位于amaziot_bloom_os_sdk\sample\libraries\8.5_ele_log Gitee源码地址:https://gitee.com/ning./hongdou Github源码地址:https://github.com/ayumid/hongdou 编译指令:.\build.bat -l .\amaziot_bloom_os_sdk\sample\libraries\8.5_ele_log 2 组件功能介绍 电量日志组件提供本地日志一种存储,受限于模组空间,因此日志不会记录太多,通过相应的宏控制大小和记录频次。 日志中只保存时间戳和对应的电量值。 组件会创建三个文件,信息保存文件,以及两个日志文件,两个文件乒乓存储。 3 代码讲解 1 dtu_sw_log_file_init 功能:该函数用于,电量日志文件创建,初始化。 参数:无 返回值:无 示例: dtu_sw_log_file_init(); 2 air_sw_log_write_data 功能:该函数用于,写入电量到文件中,两个文件乒乓写入。 参数: 参数 释义 ele 电量值 返回值:0 示例: air_sw_log_write_data(1111.1111) 3 air_sw_log_write_file_info_change 功能:该函数用于,清理日志存储文件,乒乓文件信息,用于更换日志存储目标文件。 参数:无 返回值:无 示例: air_sw_log_write_file_info_change(); 4 air_sw_log_write_file_info 功能:该函数用于,写日志信息存储文件。 参数:无 返回值:无 示例: air_sw_log_write_file_info(); 5 air_sw_log_read_file_info 功能:该函数用于,读日志信息存储文件内容。 参数:无 返回值:文件指针 示例: pst_filei = air_sw_log_read_file_info(); 5 air_sw_log_read_log 功能:该函数用于,读日志存储文件内容。 参数:无 返回值:无 示例: air_sw_log_read_log(); 4 Demo实战 4.1 创建一个Demo 复制4.2_hal_UART示例工程,到同一个文件夹下,修改文件名为6.0_CSE7759B,如图: 4.2 修改makefile 增加文件组件所在目录头文件路径,和源文件路径,如图: 4.3 增加头文件 使用代码编辑器,将新建的工程文件加入代码编辑器中,打开main.c,修改main.c,加入am.h等头文件,如图: 4.4 修改代码 在Phase2Inits_exit 创建一个任务,如图: 4.5 宏定义介绍 sample_ele_log_uart_printf 输出日志到DEBUG 串口,日志比较少,可以输出到这个串口,如果日志比较多,需要输出到usb口,以免不必要的问题出现 sample_ele_log_catstudio_printf 输出日志到USB 串口,使用catstudio查看,catstudio查看日志需要更新对应版本mdb.txt文件,软件打开filtter过滤日志,只查看用户输出的日志 SAMPLE_ELE_LOG_TASK_STACK_SIZE 栈空间宏定义 4.6 全局变量介绍 sample_ele_log_task_stack 任务栈空间,本例使用动态内存实现,用户在做项目时,可以预先估算下当先任务需要的大致栈空间,OS没有提供可以查看栈空间使用情况的API sample_ele_log_task_ref 任务指针 sample_ele_log_timer_ref 定时器指针 sample_ele_log_flag_ref 事件指针 4.7 函数介绍 Phase1Inits_enter 底层初始化,本例空 Phase1Inits_exit 底层初始化,本例空 Phase2Inits_enter 底层初始化,本例空 Phase2Inits_exit 创建主任务,初始化消息队列,定时器,任务等。 代码片段: enter main\n"); ret = OSAFlagCreate(&sample_ele_log_flag_ref); ASSERT(ret == OS_SUCCESS); ret = OSATimerCreate(&sample_ele_log_timer_ref); ASSERT(ret == OS_SUCCESS); ret = OSATaskCreate(&sample_ele_log_task_ref, sample_ele_log_task_stack, SAMPLE_ELE_LOG_TASK_STACK_SIZE, 200, "filetest-task", sample_ele_log_task, NULL); ASSERT(ret == OS_SUCCESS); OSATimerStart(sample_ele_log_timer_ref, 5 * 200, 5 * 200, sample_ele_log_timer_callback, 0); // 3 seconds timer sample_ele_log_timer_callback 定时器回调函数,发送事件给主任务。 代码片段: OSAFlagSet(sample_ele_log_flag_ref, SAMPLE_ELE_LOG_TASK_TIMER_CHANGE_FLAG_BIT, OSA_FLAG_OR); sample_ele_log_task 日志写入任务,由事件驱动,这里5s一次。 代码片段: open file for write error\n"); } } 4.8 编译 在SDK根目录打开命令行,输入命令.\build.bat -l .\amaziot_bloom_os_sdk\sample\libraries\8.5_ele_log\ 1.270(MB)| |------------------------------------------------------------------------------------| cp_1606L.axf cp_1606L.bin cp_1606L.map gnumake: Leaving directory `F:/3.asr-b/cat.1-asr1606/1.software/BLOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF/amaziot_bloom_os_sdk/sample/libraries/8.5_ele_log' "copy NEZHAC_CP_CNR_MIFI_TX.bin to ./ " 已复制 1 个文件。 4.9 生成固件 参考入门中开发工具,生成工具。 4.10 测试 测试步骤: 参考编译教程,和文档开头的编译指令,进行编译 按照编译教程选择对应的选项 烧录 4.11 固件 上电后,debug串口会打印出计算出的数据; 本文章源自奇迹物联开源的物联网应用知识库Cellular IoT Wiki,更多技术干货欢迎关注收藏Wiki: Cellular IoT Wiki 知识库(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf) 注:本文部分内容来源于网络,如有侵权,请及时联系我们。
  • 2024-10-10 14:22
    63 次阅读|
    0 个评论
    01 概述 空气开关,又名空气断路器,是断路器的一种。是一种只要电路中电流超过额定电流就会自动断开的开关。空气开关是低压配电网络和电力拖动系统中非常重要的一种电器,它集控制和多种保护功能于一身。除能完成接触和分断电路外,尚能对电路或电气设备发生的短路、严重过载及欠电压等进行保护,同时也可以用于不频繁地启动电动机。 4G网络无线空气开关是一种结合了现代通信技术的断路器,它通过4G网络实现了无线远程控制功能,使得用户可以通过手机或其他智能设备对电路进行控制,包括开启、关闭以及监控电路的状态。这种空气开关不仅提供了远程控制的便利,还增加了电路的安全性和管理的灵活性。 4G空气开关的主要特点包括: 远程控制‌:用户可以通过4G网络,随时随地通过手机APP或其他智能设备对电路进行控制,无需近距离操作。 实时监控‌:能够实时监控电路的状态,包括电流、电压等参数,确保电路安全运行。 故障诊断‌:通过4G网络传输的数据,可以及时发现电路故障,提前预警,避免事故发生。 多种保护功能‌:具备短路保护、过载保护、失压保护等多种保护功能,确保电路和设备的安全。 02 4G空气开关功能 当未来某个时刻需要空气开关进行分闸或者合闸,通过手动来控制可以达到目的,但是,可能会遇到操作不及时等问题。因此,空气开关都会提供定时功能,只需要设置好定时,到了时间,空气开关会响应相应的设置动作,合闸或者分闸。延时主要场景是,按照实际需求,需要合闸1小时,2小时等情况。 1 定时 设置一个定时器,定时器定时时间范围1分钟到24小时,超时后会合闸或者分闸 2 延时 设置一个定时器,超时后,会执行延时超时相应动作 03 组件的使用 1 Gitee链接地址 Demo位于amaziot_bloom_os_sdk\sample\libraries\8.4_timer_delay Gitee源码地址:https://gitee.com/ning./hongdou Github源码地址:https://github.com/ayumid/hongdou 编译指令:.\build.bat -l .\amaziot_bloom_os_sdk\sample\libraries\8.4_timer_delay 2 组件功能介绍 本组件实现空开产品中的定时,和延时功能,并进行相应的后续操作。 定时和延时本质是一样的,服务器提供未来某个时刻或者延时到未来某个时刻,都涉及当前时刻,未来时刻,间隔三个参数,因此实现两种功能使用下面相同的api。服务器不同的参数可以转换后调用本组件的API。 3 代码讲解 1 lib_am_ty_sw_timer_delay_timer_init 功能:该函数用于,初始化定时,延时任务,和相关资源。 参数:无 返回值:无 示例: C lib_am_ty_sw_timer_delay_timer_init(); 2 lib_am_ty_sw_timer_delay_timer_task 功能:该函数用于,定时,延时任务 参数:无 返回值:无 示例: C ret = OSATaskCreate(&lib_am_ty_sw_timer_delay_timer_task_ref, lats_timer_delay_timer_task_stack, LATS_TASK_TIMER_TASK_STACK_SIZE, 120, "timer_delay_timer_task", lib_am_ty_sw_timer_delay_timer_task, NULL); 3 lib_am_ty_sw_timer_refresh 功能:该函数用于,检查数组中的定时,是否超时,需要动作。 参数:无 返回值:无 示例: C lib_am_ty_sw_timer_refresh(); 4 lib_am_ty_sw_timer_delay_timer_cbk 功能:该函数用于,定时器超时回调函数。 参数:无 返回值:无 示例: C OSATimerStart(lib_am_ty_sw_timer_delay_timer_ref, 200, 200, lib_am_ty_sw_timer_delay_timer_cbk, 0); 4 Demo实战 4.1 创建一个Demo 复制8.3_interlocking示例工程,到同一个文件夹下,修改文件名为8.4_timer_delay,如图: 4.2 修改makefile 增加文件组件所在目录头文件路径,和源文件路径,如图: 4.3 增加头文件 使用代码编辑器,将新建的工程文件加入代码编辑器中,打开main.c,修改main.c,加入am.h等头文件,如图: 4.4 修改代码 在Phase2Inits_exit 创建一个任务,如图: 4.5 宏定义介绍 sample_td_uart_printf 输出日志到DEBUG 串口,日志比较少,可以输出到这个串口,如果日志比较多,需要输出到usb口,以免不必要的问题出现 sample_td_catstudio_printf 输出日志到USB 串口,使用catstudio查看,catstudio查看日志需要更新对应版本mdb.txt文件,软件打开filtter过滤日志,只查看用户输出的日志 SAMPLE_TD_TASK_STACK_SIZE 栈空间宏定义 4.6 全局变量介绍 sample_td_task_stack 任务栈空间,本例使用数组实现,用户在做项目时,可以预先估算下当先任务需要的大致栈空间,OS没有提供可以查看栈空间使用情况的API sample_td_task_ref 任务指针 4.7 函数介绍 Phase1Inits_enter 底层初始化,本例空 Phase1Inits_exit 底层初始化,本例空 Phase2Inits_enter 底层初始化,本例空 Phase2Inits_exit 创建主任务,初始化消息队列,定时器,任务等。 代码片段: C int ret; ret = OSATaskCreate(&sample_td_task_ref, sample_td_task_stack, SAMPLE_TD_TASK_STACK_SIZE, 120, "sample_td_task", sample_td_task, NULL); ASSERT(ret == OS_SUCCESS); sample_td_uart_printf("Phase2Inits_exit\n"); td_wait_network_ready 驻网等待,定时器需要联网获取时间后才可以开始。 代码片段: C static void td_wait_network_ready(void) { int count = 0; int ready = 0; while (!ready) { if (getCeregReady(isMasterSim0() ? IND_REQ_HANDLE : IND_REQ_HANDLE_1)) { ready = 1; } sample_td_uart_printf("wait_network_ready: %d s", count++); 300) PM812_SW_RESET(); OSATaskSleep(200); } } td_open 打开某一路的输出。 代码片段: C static void td_open(UINT8 channel, UINT8 type) { sample_td_uart_printf("channel %d %d open", channel, type); } td_close 关闭某一路的输出。 代码片段: C static void td_close(UINT8 channel, UINT8 type) { sample_td_uart_printf("channel %d %d close", channel, type); } sample_td_task 延时测试主任务,定义了三个延时,10,30s,60s。 代码片段: C static void sample_td_task(void *ptr) { UINT32 timestamp = 0; //等待网络连接 td_wait_network_ready(); //根据当前时间,设置,10s,30s,1分钟三个定时器 //服务器下发未来的某个时刻,可以将下发的时刻改为时间戳赋值即可 timestamp = utils_utc8_2_timestamp(); sample_td_uart_printf("%s(%d) now:%ld", __FUNCTION__, __LINE__, timestamp); am_ty_sw_td .timestamp = timestamp + 10; am_ty_sw_td .id = 1; am_ty_sw_td .chl = 1; am_ty_sw_td .t = 1; am_ty_sw_td .open = &td_open; am_ty_sw_td .timestamp = timestamp + 30; am_ty_sw_td .id = 2; am_ty_sw_td .chl = 1; am_ty_sw_td .t = 0; am_ty_sw_td .open = &td_close; am_ty_sw_td .timestamp = timestamp + 60; am_ty_sw_td .id = 3; am_ty_sw_td .chl = 1; am_ty_sw_td .t = 1; am_ty_sw_td .open = &td_open; //初始化定时器任务和资源 lib_am_ty_sw_timer_delay_timer_init(); while(1) { sample_td_sleep(1); } } 4.8 编译 在SDK根目录打开命令行,输入命令.\build.bat -l .\amaziot_bloom_os_sdk\sample\libraries\8.4_timer_delay\ 4.9 生成固件 参考入门中开发工具,生成工具。 4.10 测试 测试步骤: 参考编译教程,和文档开头的编译指令,进行编译 按照编译教程选择对应的选项 烧录 4.11 固件 上电后,debug串口会打印出延时后对应响应,用户可以按照自己的业务逻辑处理; 本文章源自奇迹物联开源的物联网应用知识库Cellular IoT Wiki,更多技术干货欢迎关注收藏Wiki: Cellular IoT Wiki 知识库(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf) 注:本文部分内容来源于网络,如有侵权,请及时联系我们。
  • 2024-10-10 14:20
    72 次阅读|
    0 个评论
    01 概述 在电路控制中,两路输出信号之间经常需要互锁,即当施加第一路输入信号时,第一路输出端工作,第二路输出端就被锁住;当施加第二路输入信号时,第二路输出端工作,第一路输出端被锁住; 而当两路输入信号同时施加时,两路输出端都不工作。现有的互锁电路主要采用软件编程或带有互锁功能的机械开关实现,软件编程实现的互锁电路成本较高,专业性较强,应用普遍性差;机械开关体积大,不适用于在产品电路中应用。 互锁电路是指:几个回路之间,利用某一回路的辅助触点,去控制对方的线圈回路,进行状态保持或功能限制。一般对象是对其他回路的控制。 02 互锁原理 互锁是断路器在合闸和分闸时,如果其中有一个动作而另一个没动作(如合闸),则两个都处于分闸状态。 互锁可以起到防止误操作、减少事故的发生、保护设备和人身的安全。 原理: 当断路器的控制回路接通后,若要使主电路断开,必须先使控制回路中的触头闭合;若要使主电路闭合,也必须先使控制回路中的触头断开.这样在两个触点间便产生了电磁吸力而使两触点不能分开.这种电磁吸力的大小与它们之间的电气联接电阻值有关。当电流超过规定值时(例如短路故障),继电器常发出信号并切断电源.由于继电器的线圈有灭弧作用,所以能可靠地保护被保护的设备不受过电流的损伤.但是当断路器处在非正常工作状态下(例如合上或断开负荷)或在正常工作时突然停电时,其线圈将产生较大的瞬间电压而把衔铁吸住而不能释放所控制的线路和设备。 03 互锁的作用 断路器互锁广泛应用于电力系统、工业自动化、石油化工、航天航空等领域,主要起到保护电力设备和工人的作用。在电力系统中,断路器互锁可以避免发电机、变压器等电力设备在操作或维修时的误操作,从而提高电力系统的稳定性和安全性。在工业自动化、石油化工等领域,断路器互锁可以避免高压电源对工业自动化设备和人员的影响,提高工作效率和安全性。 总之,断路器互锁是一种重要的安全保护措施,可以有效避免电力设备和工人的误操作,保障工作安全和设备的正常运行。 04 组件的使用 1 Gitee链接地址 Demo位于amaziot_bloom_os_sdk\sample\libraries\8.3_interlocking Gitee源码地址:https://gitee.com/ning./hongdou Github源码地址:https://github.com/ayumid/hongdou 编译指令:.\build.bat -l .\amaziot_bloom_os_sdk\sample\libraries\8.3_interlocking 2 组件功能介绍 应用于多路输出空开项目中,当只需要一路输出,其它路关闭的情况下,参考这个组件,实现输出互锁。 3 代码讲解 1 lib_interlocking_gpio0_level_flip_lock 功能:该函数用于,gpio 第一路输出高 其它关闭。 参数:无 返回值:无 示例: C lib_interlocking_gpio0_level_flip_lock(); 2 lib_interlocking_gpio1_level_flip_lock 功能:该函数用于,gpio 第二路输出高 其它关闭。 参数:无 返回值:无 示例: C lib_interlocking_gpio1_level_flip_lock(); 3 lib_interlocking_gpio2_level_flip_lock 功能:该函数用于,gpio 第三路输出高 其它关闭。 参数:无 返回值:无 示例: C lib_interlocking_gpio2_level_flip_lock(); 4 lib_interlocking_gpio3_level_flip_lock 功能:该函数用于,gpio 第四路输出高 其它关闭。 参数:无 返回值:无 示例: C lib_interlocking_gpio3_level_flip_lock(); 5 lib_interlocking_gpio_open 功能:该函数用于,gpio输出高。 参数:无 返回值:无 示例: C lib_interlocking_gpio_open(); 6 lib_interlocking_gpio_open 功能:该函数用于,gpio输出高。 参数:无 返回值:无 示例: C lib_interlocking_gpio_open(); 7 lib_interlocking_gpio_close 功能:该函数用于,gpio输出低。 参数:无 返回值:无 示例: C lib_interlocking_gpio_open(); 8 lib_interlocking_gpio_level_flip 功能:该函数用于,gpio输出翻转。 参数:无 返回值:无 示例: C lib_interlocking_gpio_open(); 9 lib_interlocking_gpio_init 功能:该函数用于,互锁GPIO初始化,上电根据上次断电前状态,或者设置的上电状态,初始化。 参数:无 返回值:无 示例: C lib_interlocking_gpio_init(); 4 Demo实战 4.1 创建一个Demo 复制4.2_hal_UART示例工程,到同一个文件夹下,修改文件名为6.0_CSE7759B,如图: 4.2 修改makefile 增加文件组件所在目录头文件路径,和源文件路径,如图: 4.3 增加头文件 使用代码编辑器,将新建的工程文件加入代码编辑器中,打开main.c,修改main.c,加入am.h等头文件,如图: 4.4 修改代码 在Phase2Inits_exit 创建一个任务,如图: 4.5 宏定义介绍 sample_uarts_uart_printf 输出日志到DEBUG 串口,日志比较少,可以输出到这个串口,如果日志比较多,需要输出到usb口,以免不必要的问题出现 sample_lock_catstudio_printf 输出日志到USB 串口,使用catstudio查看,catstudio查看日志需要更新对应版本mdb.txt文件,软件打开filtter过滤日志,只查看用户输出的日志 SAMPLE_LOCK_TASK_STACK_SIZE 栈空间宏定义 4.6 全局变量介绍 sample_lock_task_stack 任务栈空间,本例使用动态内存实现,用户在做项目时,可以预先估算下当先任务需要的大致栈空间,OS没有提供可以查看栈空间使用情况的API sample_lock_task_ref 任务指针 4.7 函数介绍 Phase1Inits_enter 底层初始化,本例空 Phase1Inits_exit 底层初始化,本例空 Phase2Inits_enter 底层初始化,本例空 Phase2Inits_exit 创建主任务,初始化消息队列,定时器,任务等。 代码片段: C int ret; ret = OSATaskCreate(&sample_lock_task_ref, sample_lock_task_stack, SAMPLE_LOCK_TASK_STACK_SIZE, 120, "sample_interlock_task", sample_interlock_task, NULL); ASSERT(ret == OS_SUCCESS); sample_lock_uart_printf("Phase2Inits_exit\n"); sample_interlock_task 主任务,每隔一秒只输出一路。 代码片段: C while(1) { //只有一个led点亮 lib_interlocking_gpio0_level_flip_lock(); sample_lock_uart_printf("%s LED1", __FUNCTION__, __LINE__); sample_lock_sleep(1); lib_interlocking_gpio1_level_flip_lock(); sample_lock_uart_printf("%s LED2", __FUNCTION__, __LINE__); sample_lock_sleep(1); lib_interlocking_gpio2_level_flip_lock(); sample_lock_uart_printf("%s LED4", __FUNCTION__, __LINE__); sample_lock_sleep(1); lib_interlocking_gpio3_level_flip_lock(); sample_lock_uart_printf("%s LED4", __FUNCTION__, __LINE__); sample_lock_sleep(1); } 4.8 编译 在SDK根目录打开命令行,输入命令.\build.bat -l .\amaziot_bloom_os_sdk\sample\libraries\8.3_interlocking C++ PS F:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF λ .\build.bat -l .\amaziot_bloom_os_sdk\sample\libraries\8.3_interlocking\ 子目录或文件 out\bin 已经存在。 命令语法不正确。 子目录或文件 build\obj 已经存在。 gnumake: Entering directory `F:/3.asr-b/cat.1-asr1606/1.software/BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF/amaziot_bloom_os_sdk/sample/libraries/8.3_interlocking' armcc.exe -c --cpu Cortex-R4 --no_unaligned_access -g -O2 --apcs /inter --diag_suppress 2084,1,2,177,188,223,550,1296,2795,6319,9931,9933 --diag_error=warning --gnu --thumb --loose_implicit_cast -DDATA_COLLECTOR_IMPL -DISPT_OVER_SSP -DDIAG_SSP_DOUBLE_BUFFER_USE_DYNAMIC_ALLOCATION -DENV_XSCALE -DL1_DCXO_ENABLED -DLTE_HIGH_MOBILITY_OPTIMIZATION -DRUN_XIP_MODE -DCRANE_Z2 -DCA_LONG_IPC_MSG -DNEZHA3 -DNEZHA3_1826 -DUPGRADE_PLMS -DUPGRADE_PLMS_SR -DLTE_GSMMULTIBCCH -DGPLC_LTE_RSSI_SCAN -DL1V_NEW_RSSI -DUPGRADE_PLMS_3G -DUPGRADE_PLMS_L1 -DUPGRADE_FG_PLMS -DFG_PLMS_URR -DUPGRADE_L1A_FG_PLMS -DUPGRADE_PLMS_STAGE_2 -DUPGRADE_MBCCH -DMULTI_BCCH_READY_IND -DURR_MRAT_ICS_SEARCH -DUPGRADE_ICS -DMRAT_NAS -DUPGRADE_PLMS_SEARCH_API -DICS_MBCCH -DICS_MBCCH_2G_RSSI -DDIAG_NEWPP -DPHS_SW_DEMO -DPHS_SW_DEMO_TTC -DPHS_SW_DEMO_TTC_PM -DFULL_SYSTEM -D_DDR_INIT_ -D_TAVOR_HARBELL_ -DUPGRADE_ARBEL_PLATFORM -D_TAVOR_B0_SILICON_ -DTDL1C_SPY_ENABLE -DDLM_TAVOR -DTAVOR -DFLAVOR_DUALCORE -DDEBUG_D2_MOR_REG_RESEREVED_ENABLE -D_DIAG_USE_COMMSTACK_ -D_TAVOR_DIAG_ -DPM_DEBUG_MODE_ENABLED -DPM_D2FULL_MODE -DPM_EXT_DBG_INT_ARR -DFEATURE_WB_AMR_PS -DMACRO_FOR_LWG -DHL_LWG -DOPTIMIZE_FOR_2G_BCCH -DPLAT_TEST -D_FDI_USE_OSA_ -DPLAT_USE_THREADX -DLWIP_IPNETBUF_SUPPORT -DCRANE_MCU_DONGLE -DAT_OVER_UART -DPHS_SW_DEMO_TTC_PM -DUPGRADE_LTE_ONLY -DEXT_AT_MODEM_SUPPORT -DLTEONLY_THIN_SINGLE_SIM -DLFS_FILE_SYS -DLFS_FILE_SYS_V2 -DPSM_ENABLE -DNO_PAHO_MQTT -DNO_XML -DNO_LWM2M -DREMOVE_MBEDTLS -DNO_AT_NET -DCRANE_SD_NOT_SUPPORT -DNTP -DYMODEM_EEH_DUMP -DENABLE_DM_LTEONLY -DLTEONLY_THIN -DNO_EXTEND_MY_Q_AT -DNOT_SUPPORT_HTTPS -DNOT_SUPPORT_PM813 -DCRANEL_4MRAM -DREMOVE_PB -DUART_NEW_VERSION -DREMOVE_MEP -DREMOVE_SMS -DREMOVE_ENVSIM -DAPN_INCODE -DLTEONLY_THIN_SINGLE_SIM_2MFLASH -DASR160X_OPENCPU_FEATURE -DENABLE_UART3_FEATRUE -DENABLE_UART4_FEATRUE -DYUGE_MBEDTLS_3_2_1 -DENABLE_MAC_TX_DATA_LOGGING -DDISABLE_NVRAM_ACCESS -DINTEL_UPGRADE_EE_HANDLER_SUPPORT -DLTE_W_PS -DL1_DUAL_MODE -DUPGRADE_HERMON_DUAL -DINTEL_UPGRADE_DUAL_RAT -DINTEL_UPGRADE_GPRS_CIPHER_FLUSH -DUPGRADE_ENHANCED_QUAD_BAND -DINTEL_2CHIP_PLAT -DI_2CHIP_PLAT -DUPGRDE_TAVOR_COMMUNICATION -DRUN_WIRELESS_MODEM -DFLAVOR_DDR12MB_GB1MB5 -DFEATURE_SHMEM -DACIPC_ENABLE_NEW_CALLBACK_MECHANISM -DRELIABLE_DATA -DMAP_NSS -DTV_FNAME="\"SW_PLATFORM=PMD2NONE PHS_SW_DEMO PHS_SW_DEMO_PM SRCNUCLEUS FULL_SYSTEM NOACRTC PDFLT PLAT_TEST PV2 DIAGOSHMEM NVM WITHL1V\"" -DTV_FDESC="\"SW_DESCRIPTION=\"" -DENABLE_ACIPC -D_DATAOMSL_ENABLED_ -DUSB_CABLE_DETECTION_VIA_PMIC -DMIPS_TEST -DMIPS_TEST_RAM -DFLAVOR_DIET_RAM -DNVM_INCLUDE -DMSL_INCLUDE -DMSL_POOL_MEM -DNO_AUDIO -DOSA_QUEUE_NAMES -D_DIAG_DISABLE_USB_ -DOSA_NUCLEUS -DOSA_USED -DPM_D2NONE_MODE -DCRANE_SOC_TEMPERATURE_SENSOR -DL1_SW_UPDATE_FOR_DIGRF -DPHS_L1_SW_UPDATE_R7 -DUPGRADE_LTE -DFRBD_CALIB_NVM -DFRBD_AGC_CALIB -DFRBD_FDT_CALIB -DHSPA_MPR -DCAPT_PARAMS_OPTIMIZE -DL1_WB_R99_ONLY -DL1V_WB_R99_ONLY -DINTERGRATED_RF_SUPPORT -DL1_RX_DIV_SUPPORT -DENABLE_OOS_HANDLING -DTAVOR_D2_WB_L1_SUPPORT -DL1_DDR_HIGH_FREQ -DUPGRADE_DIGRF3G_SUPPORT -DW_PS_PLUS_G_PAGING -D"NO_APLP=0" -DINTEL_UPGRADE_UNIFIED_VOICE_TASK -DINTEL_UPGRADE_R99 -DAPLP_SPY_ENABLE -D__TARGET_FEATURE_DOUBLEWORD -DWHOLE_UMTS_STACK -DUSE_TTPCOM_CSR_BLUETOOTH_AUDIO_GAIN_CONTROL -DL1_UPGRADE_R5 -DUPGRADE_EDGE -DUPGRADE_R4_FS1 -DINTEL_UPGRADE_GSM_CRL_IF -DUPGRADE_EGPRS_M -DINTEL_UPGRADE_EGPRS_M -DINTEL_UPGRADE_RF_PARAMS_IN_CF_TDS -DINTEL_UPGRADE_2SAMPLES_PER_SYMBOL -D"GPRS_MULTISLOT_CLASS=12" -D"EGPRS_MULTISLOT_CLASS=12" -DMARVELL_UPGRADE_BSIC_REDESIGN -DMSL_INCLUDE -DINTEL_HERMON_SAC -DCRANE_CUST_BUILD -DL1_SW_UPDATE_FOR_DIGRF -DFLAVOR_COM -DSILICON_PV2 -DSILICON_SEAGULL -DSILICON_TTC_CORE_SEAGULL -DPCAC_INCLUDE -Otime -DBUILD_DATE="\"07 26 2024\"" -DBUILD_TIME="\"12:06:09\"" -Iatcmds\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\telephony\yuge\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hal\UART\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hal\core\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hal\PMU\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hal\GPIO\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\os\posix\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\diag\diag_logic\src -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\csw\SysCfg\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\csw\platform\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\env\win32\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\csw\BSP\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\csw\platform\dev_plat\build -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\os\osa\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\os\threadx\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\os\nu_xscale\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\psm\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\httpclient\src -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\diag\diag_logic\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\timer\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\intc\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\csw\PM\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\pm\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\softutil\TickManager\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\BSP\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\telephony\atcmdsrv\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\telephony\atparser\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\telephony\sdk\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\httpclient\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\ci\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\lwipv4v6\src\include -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\lwipv4v6\src\include\arch -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\lwipv4v6\src\include\ipv4 -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\lwipv4v6\src\include\ipv6 -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\lwipv4v6\src\include\lwip -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\lwipv4v6\src\include\netif -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\mmi_mat\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\tavor\Arbel\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\tavor\env\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\telephony\modem\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\duster\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\fota\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hal\I2C\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hal\ACIPC\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\softutil\fatsys\flash -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\softutil\FDI\src\INCLUDE -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hal\MMU\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\softutil\FDI\src\FDI_ADD -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\softutil\FDI\src\FM_INC -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\softutil\fatsys\fs\hdr -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\softutil\littlefs\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\tts\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\dial\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\softutil\csw_memory\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\utilities\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\commpm\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\softutil\nvm\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\softutil\EEhandler\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\softutil\EEhandler\src -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\RTC\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\telephony\ci_client\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hal\BT_device\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hal\UART\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\mrd\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\dma\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\softutil\softutil\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hal\SPI\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\websocket\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\atnet_srv\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\softutil\fotacomm\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\aud_sw\Audio\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\aud_sw\ACM_COMM\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\aud_sw\audio_stub\src -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hop\aam\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\aud_sw\AudioHAL\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\hal\dbgshell\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\include\asr160x\pcac\opencpu\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\amaziot_bloom_os_sdk\utils -IF:/3.asr-b/cat.1-asr1606/1.software/BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF/amaziot_bloom_os_sdk/sample/libraries/8.3_interlocking\am\inc -IF:/3.asr-b/cat.1-asr1606/1.software/BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF/amaziot_bloom_os_sdk/sample/libraries/8.3_interlocking\atcmds\inc -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\amaziot_bloom_os_sdk\libraries -IF:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\amaziot_bloom_os_sdk\libraries\air_4g_sw\air_sw4_tuya -o build\obj/ext_at_cmds.o F:/3.asr-b/cat.1-asr1606/1.software/BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF/amaziot_bloom_os_sdk/sample/libraries/8.3_interlocking/atcmds/src/ext_at_cmds.c armlink.exe build\obj/main.o build\obj/ext_at_cmds.o build\obj/ext_at_controller.o build\obj/am_ty_sw_interlocking.o \ -o F:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\out\bin\Arbel_PMD2NONE_40M.axf \ --via F:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\prebuilt_1606l\Arbel_PMD2NONE_targ_objliblist.txt \ --elf \ --scatter F:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\prebuilt_1606l\Crane_DS_4M_Ram_2M_Flash_XIP_CIPSRAM_Common_SingleSIM.sct \ --predefine="-DLTEONLY_THIN_SINGLE_SIM" --map --symbols --info sizes,totals \ --list F:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\out\bin\Arbel_PMD2NONE_40M.map \ --keep init.o(Header) --keep init.o(Vectors) --diag_suppress 6312,6314,6319,6329 \ --feedback F:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\out\feedbackLinkOptLteonlyThin_SingleSim_NoSMS.txt F:\3.asr-b\cat.1-asr1606\1.software\BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF\tools\buildimage_1606l.bat SDK_PROD_TYPE : SDK_CUST_SKU : SDK_PS_MODE : SDK_CHIP_VER : SDK_OS_TYPE : Platform Convertion Tools v4.01 with PS option extension Convertion done! |INPUT |out\bin\cp_1606L.bin |MARK |NAME |EXEADDR .LOADADDR.LENGTH .CPZLADDR|COMPRESS STASTIC | |--------|--------|--------.--------.--------.--------|------------------------------| |This Is LteOnly 4M| 00003000 |This Is LteOnly 4M| 00001000 |This Is LteOnly 4M| 0000a000 |This Is LteOnly 4M| 0001e000 |This Is LteOnly 4M| 0001b000 |This Is LteOnly 4M| 0001b000 |This Is LteOnly 4M| 0001a000 |This Is LteOnly 4M| 0001a000 |This Is LteOnly 4M| 00011000 |This Is LteOnly 4M| 0001e000 |This Is LteOnly 4M| 00022000 |This Is LteOnly 4M| 00011000 |--------|--------|--------.--------.--------.--------|------------------------------| 0x00146000| 1.273(MB)| |------------------------------------------------------------------------------------| cp_1606L.axf cp_1606L.bin cp_1606L.map gnumake: Leaving directory `F:/3.asr-b/cat.1-asr1606/1.software/BlOOM_OS_1606_OPENCPU_1191_A09_WIHT_NEWRF/amaziot_bloom_os_sdk/sample/libraries/8.3_interlocking' "copy NEZHAC_CP_CNR_MIFI_TX.bin to ./ " 已复制 1 个文件。 4.9 生成固件 参考入门中开发工具,生成工具。 4.10 测试 测试步骤: 参考编译教程,和文档开头的编译指令,进行编译 按照编译教程选择对应的选项 烧录 4.11 固件 上电后,debug串口会打印出计算出的数据; 本文章源自奇迹物联开源的物联网应用知识库Cellular IoT Wiki,更多技术干货欢迎关注收藏Wiki: Cellular IoT Wiki 知识库(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf) 注:本文部分内容来源于网络,如有侵权,请及时联系我们。
相关资源