Haxe 是一门新兴的开源编程语言,开发者称:“相比其他语言(Java 的平台是 
JVM,C# 的平台是 .Net,ActionScript 的平台是 Flash Player
等等),Haxe才是真正的多平台语言。其 4.0.0 RC.4
版本发布了,此版本提高编译服务器的完整性和内存利用率,为了更好地支持
IDE,还进行了许多修改。

ESP-IDF Release v2.1

图片 1 igrr 发布了这个 on
29
Jul · 自此发布以来,我 承诺要 承诺414

自v2.0以来的变化。

图片 2

下面是更新内容:

突破变化

版本v2.1旨在大大兼容为ESP-IDF
v2.0编写的应用程序。但是,引入以下突破性变化:

  • esp_bt_controller_init函数收到一个新的esp_bt_controller_config_t *参数。
  • 如果应用程序采用双核支持构建,则使用正常寄存器访问宏访问DPORT寄存器将导致编译时错误(如果在编译时无法对寄存器地址进行评估,则会导致运行时错误)。必须更新应用程序以使用具有DPORT_前缀的注册访问宏。
  • nvs_flash_init 函数现在可以返回错误代码,必须由应用程序检查(见NVS示例)。
  • 通话后esp_ble_gatts_create_attr_tab,应用程序只能期望ESP_GATTS_CREAT_ATTR_TAB_EVT在GATTS回调中收到。ESP_GATTS_CREATE_EVTESP_GATTS_ADD_xxx_EVT现在不会收到。
    有关详细用法,请参阅gatt_server_service_table示例。

八月初 Mark Mitchell 发布了 GCC 4.3.2 版本,GCC是GNU编译集合,包括C,
C++, Objective-C, Fortran, Java, and Ada编译器等。从这里下载最新的GCC:
让我们了解一下GCC 4:在过去的几年中,GNU Compiler Collection
(GCC)一直在做GCC 3 到 GCC 4 的主要版本转换。GCC 4是一个重要的版本,GCC 4
新增了很多新的最优化框架(和新的中间代码生成),新的架构和语言支持,多种新属性和选项变化。了解GCC
4新的属性和它们的优点很有必要。GCC是所有开发的基石,不管是对开源世界和闭源世界。它让操作系统和架构能够运行。当一个新的处理器出现,它必须依赖一个GCC版本支持(GCC在后台为它提供代码生成)。GCC也让开源操作系统Linux得以运行,让Linux进入嵌入开发领域成为现实……但是GCC并不是静止的,新的处理器架构不停的出现,新的研究发现更好的方式来生成最优化代码,所以GCC也在一直在发展中,并且成功的发布了新的主要版本GCC
4。本文将浏览GCC的核心修改,让你熟悉新的编译标准。首先简短复习一下的GCC历史:GCC
最初是GNU C Compiler,由大名鼎鼎的 Richard Stallman 同学
在1987年首次发布。Richard开始这个项目于1984年,期望建立一个免费的C编译器,能够被使用和修改。GCC
最初跑在早期的Sun和DEC
VAX系统上。作为一个开源的编译器(意味着源代码是公开的),其他开发者也在热心帮助修复bug,更重要的是升级GCC支持新的语言和其他目标架构。不久以后,它的名称变成GNU
Compiler
Collection,它已经支持多种语言和最流行的架构。GCC发布历史:今天GCC已经成为最流行的编译器,支持Ada,
Fortran, the Java™ language, C 的变种 (C++ 和
Objective-C),以及覆盖了最大范围的处理器架构(支持30种处理器家族),GCC源代码移植到了超过60种平台,也是目前现存的最复杂的开源系统,GCC现在拥有大概150万行源代码。在开始之前简单了解GCC的基本架构:编译器是一种pipeline管道架构,通过不同的层次为不同类型的数据进行通讯(见下图)。前台编译器针对特殊语言,包括特定语言的语法分析器,解析为树状结构和中间状态代码(使用注册转换语言Register
Transfer
Language:RTL)。后台编译器提供与语言无关的解析和针对特定目标架构的创建结构。为了达到这个目标,最优化使用RTL创建更快速或者更简洁代码(如果可能,两者同时兼顾)。最优化的RTL被代码生成器获取,然后生成目标代码。GCC
4的核心转换:
GCC 4
提供许多标准编译器组件的修改,最大更改是通过引进树静态单一分配(tree
Static Single Assignment:SSA)格式对代码最优化的支持。GCC 4 对于
警告warning和错误error的展示是非常彻底的(事实上,一些特定的警告信息在GCC
4中已经显示为错误)。GCC 4的一个退步是它并不是GCC
3创建对象的字节编译,这意味着GCC 3编译的代码必须通过GCC
4重新编译。不幸的是,这样的成本就要增加。让我们看看GCC 4
的主要进步。4.0 发布系列:4.0系列(4.0.4是最后版本),是GCC 进入
第4版的第一步,所以并不推荐使用在生产环境中,这个版本包含很多修改,一个是前面介绍的树静态单一分配SSA,另外一个是autovectorization自动矢量化。在GCC
4之前,中间代码名叫Register Transfer Language
(RTL),RTL是一个低层的代码,非常类似于汇编语言(从LISP
S-expressions获得灵感)。RTL的问题是它对转换成最终目标提供了优化,确失了解释信息。当需要支持更好的分析和优化的时候,Tree
SSA 设计用来同时独立于语言和目标。Tree SSA
引入了两个新的中间代码,第一个叫 GENERIC
,这是一个普通的树结构,用来形成前台树格式。 GENERIC 树转换为
GIMPLE格式和子序列控制流图来支持基于SSA的最优化。最后SSA树转换为RTL,这用于后台来做最终目标的代码生成。简单的说,就是,引入Tree
SSA的好处就是提供新的中间代码让高层和低层的最优化都做到最好。GCC
4另外一个有趣的变化是添加了loop vectorizer 循环矢量(也是基于Tree
SSA框架)。Autovectorization
自动矢量化让编译器标识代码内的分级进程循环,让目标处理器能够获得矢量指令的优势。结果是获得更加严格和高效的目标代码。另一个基于循环优化的是Swing
Modulo Scheduling
(SMS),通过减少构造层平行数量来构建最小循环指令管道。最后 4.0
系列引入很多C 和 C++ 修改,新的Fortran 前台,支持Fortran 90 和 95
(而不是古老的Fortran 77,GCC 3支持)。新的Ada
2005功能,支持更多Ada新的架构。4.1发布系列:改进的属性支持和更精确的分支可能性预判。两个很有用的优化是更好的内联支持和减少本地指令缓存能力。如果函数是内联方式,编译器不再频繁执行。而且热点调用区域将更可能通过内联来保持代码数量尽可能小,获得内联函数的优势。GCC能够帮助分段函数进入热点或者冷静区域。保持热点函数放在一起,获得更好的指令缓存。前台做了系列更新,包括支持Objective-C++。同时有大量针对java核心库(libgc)的更新。后台引入对IBM®
System z™ 9-109 处理器支持,包括支持128位指令代码,Electronics Engineers
(IEEE)浮点数,和内建原子内存存取能力。如果这些还不够吸引眼球,那么后台现在还能够发出保护堆栈攻击的指令,这意味着,如果缓冲buffer溢出被检测到,将重新排列保护指针不会崩溃。一些内建功能也被更新,用来保护缓冲buffer不会被过量请求占用。4.2发布系列:4.2版本继续支持更好的优化,同时包括语言和处理器架构的进步。后台更新包括对Sun的UltraSPARC
T1处理器支持(代码名称Niagara),同时支持Broadcom的SB-1A MIPS
芯片。前台修补了C++可视化处理机制,支持Fortran 2003
输入/输出流扩展。但是4.2最有趣的更新是添加了C,C++和Fortran编译器的OpenMP功能。OpenMP是一个多线程实现,允许编译器生成平行任务和数据代码。OpenMP一个概念:代码能够通过区域注释,这块区域平行处理能够被处理器直接使用。代码转换成多线程程序,用来处理代码块存在,然后在代码块结束后进入每个线程。下图提供了处理器如何工作的示例。4.3发布系列:这个发布系列显示功能和支持架构的加速进步
(比如很多陈旧的架构支持被删除)。新的语言支持,比如添加对Fortran
2003支持。新的处理器支持,包括支持Coldfire 处理器家族, IBM System z9
EC/BC 处理器,Cell broadband engine
晶格宽带引擎架构的互协作处理器单元(Synergistic Processor Unit
:SPU),支持SmartMIPS等。你将发现Thumb2的编译和库支持(简洁的ARM指令)以及对ARMv7架构支持,支持
Core2 处理器和Geode处理器家族。4.3
发布以后:
已经开始4.4版本开发了,这个版本即将发布,在4.4版本中OpenMP的3.0版本规格将应用到C,
C++, 和
Fortran中。编译器现在允许你定义一个在函数层进行优化的级别,(代替文档层,原先是缺省设置)。这个功能提供优化参数,提供独立的选项做优化。最后处理器将添加Picochip支持,这是一个16位多核处理器。GCC的未来?GCC的未来是光明的。GCC将支持更多的处理器和架构,GCC几乎涵盖整个开发语言。开发方面还支持一系列不同的语言,比如Mercury,GHDL(一个用于VHDL的GCC前台语言),和
统一的并行C语言(Unified Parallel C language
:UPC)。由于GCC的进步,几乎所有的软件将从GCC的进步中获得好处(从Linux和Berkeley软件到Apache等),通过GCC
4进行软件编译将更加简洁和快速。

Standard Library:

构建系统和工具

  • 修复组件src subdirs在父源代码之前需要列出的错误
  • 添加更清洁的方式来有条件地编译文件
  • 显着减少Windows上的启动时间
  • esptool:更新到v2.0最终版本
  • gen_esp32part:修复应用程序偏移量错误,Python 3支持
  • 新的’make monitor’idf_monitor工具,以便更好地监控输出。
  • all :添加 Map.clear、改进 Date API、为 haxe.display 包添加 JSON-RPC
    协议类型和在 HTTP 套接字中添加默认超时等
  • macro : 添加 Context.info、添加 Context.getMessages
    和 Context.filterMessages、在 CString 中添加字符串文本类型
  • flash:添加 flash.AnyType

引导程序

  • 修复安全启动启用 – 可以验证引导加载程序映像
  • 启用OTA中加密闪存的检查(#453)
  • 在Bootloader中启用SPI闪存Quad I /
    O:引导加载程序检查闪存ID,启用基于闪存类型的四进制I / O模式。

一般改进和优化: 

FreeRTOS的

  • all
    : 允许不带参数的枚举构造函数作为静态内联变量、改进内联时默认值的处理、对显示
    API 做了各种改进、在非活动代码中检测无效的
    #token、改进  –help-defines
    与 –help-metas、改进的整体文件查找、改进服务器对添加和删除文件的响应、改进编译服务器的内存处理、支持悬停的条件编译标识符、改进和统一标识符检查名称、字段和类型,删除一些冗余的转换表达式、添加 –server-connect

Bug修复

  • 以SMP模式修复以下API:
    • uxTaskGetSystemState
    • vTaskSuspend()/ vTaskResume()
  • 始终禁用关键区域中的中断
  • 当任务被删除时释放协处理器寄存器
  • 从队列/任务API延迟上下文切换,直到退出临界区
  • 修复CPU1的ISR堆栈空间的位置
  • 修复跨核心事件组同步

修复 bug: 

其他变化

  • 当应用程序以单核心模式运行时,断言在CPU1上启动新任务
  • 使内部堆栈大小变量在32位而不是16位
  • 将定时器任务堆栈大小增加到2048字节
  • 添加最大任务长度名称配置
  • 公开任务堆栈溢出观察点选项
  • 使用先前为ROM例程/堆栈保留的更多区域作为堆,释放大约28K的RAM。
  • 添加一个选项来配置IPC任务堆栈大小
  • 修复显示 API 中的各种位置和替换范围
  • 修复 与@:arrayAccess 相关的编译器挂起
  • 修复模式匹配器,允许在 value-places 上进行不彻底的切换
  • 修复编译服务器上丢失的局部变量类型信息
  • 修复递归类型的统一
  • 修复各种 GADT 相关问题

SoC功能

  • 介绍soc组件,添加rtc_clk和rtc_pm库的源文件
  • 添加对32k XTAL作为RTC时钟源的支持
  • 使用内部RTC时钟提高计时精度
  • 改善XTAL频率检测,增加了在菜单中选择XTAL频率的支持
  • 菜单中的默认CPU频率设置为160 MHz(以前为240 MHz)
  • 在ESP32中添加DPORT访问错误的解决方法。访问DPORT寄存器时,应用程序必须使用具有DPORT_前缀的寄存器操作宏。
  • 允许REG_SET_FIELD宏用于位字段
  • 将soc /
    io_mux_reg.h更新为最新版本(#349)

完整列表见发布说明:

无线上网

https://haxe.org/download/version/4.0.0-rc.4/ 

新功能

  • 添加smartconfig示例
  • 支持静态WiFi TX缓冲区,通过menuconfig配置缓冲区的数量
  • 支持主动/被动扫描配置停留时间(wifi_scan_config_t结构的新成员)
  • 使用新的esp_wifi_ {get,set} _promiscuous_filter
    API支持混杂模式下的数据包过滤
  • WPA2 Enterprise的wifi_auth_mode_t枚举的新成员
  • 在wifi_sta_config_t中新建通道号设置,以快速连接到AP

(文/开源中国)    

Bug修复

  • 在某些情况下,修复了WiFi兼容性问题,导致无法连接到某些AP,如TP-LINK
    742N
  • 修复导致OTA升级失败的错误
  • 提高WPS连接成功率
  • 修复ESP32未收到MIMO数据包的错误,并以混杂模式丢失了一些AMPDU加密数据包
  • 修复长距离模式不工作的错误
  • 修复了几个WiFi崩溃错误

其他变化

  • 添加WiFi驱动程序的文档
  • 将扫描的AP的SSID数组长度更改为33字节
  • 在初始化WiFi之前,更新所有要调用nvs_flash_init的示例

BLE

  • Gatt服务器通过属性表优化创建GATT服务

    • 删除每个服务的特征号码限制
    • 在创建或删除服务时修复内存泄漏
    • 在设置属性值时修复错误
  • Gatt服务器通过堆栈优化自动响应

    • 添加prepare_write_request数据包的过程
    • 在处理读取blob请求,写入请求和读取请求的数据包时修复错误
  • Gatt服务器一般优化

    • 添加GATT服务器的事件打开,取消打开和关闭
  • Gatt客户端优化

    • 自动注册远程设备的GATT服务更改ccc描述符
    • 添加API来准备写描述符
    • 添加API以刷新服务发现结果的缓存,以启动新的服务发现过程
  • GAP中心角色扫描模式优化

    • 修复在永久扫描模式下扫描的错误只有5分钟
    • 在扫描结果中添加广告数据长度和扫描响应长度
  • GAP外设角色广告模式优化

    • 添加广告停止和扫描停止完成的事件
    • 修复有时广告被意外停止的错误
  • 连接建立和断开API优化

    • 为GATT服务器和GATT客户端添加公共间隙断开API
    • 为GATT客户端添加连接事件和断开事件,以检测GATT服务器或GATT客户端回调函数中的连接状态
  • GAP一般优化

    • 添加LE数据包长度设置完成事件
    • 添加连接参数更新请求完成事件
    • 修复主机无法获取远程设备功能的错误
  • 新的SMP API

    • 添加不同配对方法的支持,包括MITM,安全连接等
    • 添加API以配置安全参数
    • 添加SMP安全性示例
    • 在安全模式下修复重新连接问题
  • L2CAP和HCI优化

    • 修复了HCI包碎片错误
    • 增加了HCI UART的支持
  • 内存优化

    • BT和BLE可以单独启用
    • 支持禁用GATT服务器,GATT客户端,SMP等,在menuconfig
  • 从Bluedroid 7.1.1合并错误修复

  • 智能手机兼容性优化

  • BLE示例代码优化

  • 加强堆栈中的错误检查和处理

  • 提高数据包接收性能

  • 在初始化BT之前,请更新所有调用nvs_flash_init的示例

经典BT

  • 新的主机API

    • 添加API设置设备名称
    • 添加API以设置可发现性和可连接性模式
  • 新档案

    • 添加A2DP接收器配置文件
    • 添加AVRCP控制器配置文件
  • 控制器错误修复

    • 修复嗅觉模式中不一致状态处理的错误
    • 在使用HCI控制器来主机数据流控制时修复错误
    • 修正无效处理HCI命令的错误“HCI_Host_Number_of_Completed_Packets”
    • 修正了经典BT的ACL-U数据传输中的断言错误
    • 修复控制器RX / TX错误(在缓存中使用rand /
      srand,任务块,异常等)
    • 修复PHY初始化错误
  • 蓝牙任务优先级优先

  • Osi_alarm模块优化为线程安全

驱动程序

新功能

  • 电机控制PWM(MCPWM)驱动程序和示例
  • SPI从驱动程序和示例
  • 在I2S驱动程序中支持PDM和内置DAC
  • 支持LEDC驱动程序中的低速通道
  • 添加ADC1示例
  • 添加使用电容式触摸传感器的示例

Bug修复

  • 对所有配置调用“const”进行参数(#519)
  • I2C驱动程序
    • 修复驱动程序在“RELEASE”配置中不工作(#304)
    • 修复从属模式读取大小错误
    • 修复I2C主机初始化(#393)上的尖峰
  • I2S驱动程序:
    • 在i2s_set_clk函数中更改通道号时修正错误
    • 修复支持24位和32位样本
    • 同时修复TX / RX
  • RMT驱动程序
    • 在RMT中添加config和tx数据的const限定符(#495)
    • 修复rmt_set_tx_thr_intr_en():仅在启用路径中检查evt_thresh(#492)
    • 解决一些关于中断的问题
  • SPI主驱动程序:
    • 在示例中使用支持DMA的内存进行显示初始化(#551)
    • 修复更高速SPI主总线所需的时序调整(#363)
    • 为DMA问题添加解决方法
  • 当不使用CD信号时,处理SD卡删除
  • 在MMC_GO_IDLE_STATE命令之前,将初始化序列发送到SD卡
  • 修复不可能检查uart_set_line_inverse(#489)
  • 当停止位设置为2位模式时,修复UART数据错误
  • 优化触摸板读取功能,以减少旋转锁定所花费的时间

以太网络

  • 添加LAN8720
    phy支持,将PHY移动到组件(#383)
  • 允许单独的以太网和WiFi配置

ULP和深度睡眠

  • 支持使用binutils汇编器生成ULP协处理器程序
  • 添加ULP脉冲计数示例
  • 添加ULP ADC示例
  • 使用触摸传感器增加对深度睡眠唤醒的支持
  • 而深睡眠的例子说明了各种唤醒模式

存储

新功能

  • 在VFS中添加对嵌套安装点的支持
  • 添加wear_levelling组件,它提供了一个类似于spi_flash接口的接口。在内部,它将数据存储在分区内,以减少任何给定扇区的最坏情况下的擦除周期数。
  • 启用对多个FATFS驱动器的支持

Bug修复

  • nvs:在写入前检查值大小,文档限制
  • nvs:在页面级删除搜索缓存(#365)
  • nvs:改进初始化过程中的错误处理
  • 修正PATH_MAX和ARG_MAX的不一致定义(#289)
  • fat / sdmmc:卸载FATFS对象错误

SPI闪存库

  • 修复闪存中的大写,未对齐写和写
  • 修正s_flash_op_complete访问中的竞争条件
  • 将ROM
    SPI闪存驱动程序的某些部分移动到ESP-IDF中以修复Wait_SPI_Idle()函数中的错误
  • SPI闪存操作锁定更短的时间
  • 在esp_partition API中修复分区迭代顺序
  • 为Flash MMU重新配置时,添加解决方案以解决高级缓存读取问题

第三方图书馆

  • 添加libsodium加密库组件(v1.0.12)
  • 添加Amazon IoT SDK组件,再加上他们的Linux示例派生的两个示例。
  • nghttp模块:更新到v1.22,使用子模块而不是树内源

LwIP的

  • 修复DHCP服务器崩溃问题
  • 将TCP TX窗口从2修改为4以保持RX / TX窗口的大小相同
  • 通过串行驱动程序启用实验/不支持的PPP(#272)
  • 给AP和STA
    netifs不同的名称,以方便调试(#456)
  • 用互斥体实现LwIP关键会话
  • 将最大打开的插槽数增加到32个

的mDNS

  • 使用AFL Fuzzer进行分析器稳定性测试
  • 添加简单的DNS-SD元查询支持(#340)
  • 修复MDNS的一系列安全问题(通过BBP报告):
    • STACK-SMASH:sprintf不受限制,可以根据需要执行多次,允许将任意长数据写入堆栈。
    • PACKET-OF-DEATH:比较允许相等,从而跳回它自我无限递归 –
      >保证崩溃。
    • TXT-SMASH:循环没有检查到达 –
      > txt最大大小(1024),导致堆栈溢出。

mbedTLS

  • 使用非阻塞插座修复EWOULDBLOCK /
    EAGAIN的检测(#425,#511)
  • 当乘法运算符太大时,使用两个MPI乘法。通过硬件加密操作允许RSA4096。

调试功能

  • 添加允许在主机和JTAG之间发送任意数据的apptrace模块
  • 通过JTAG初始化执行printf样日志记录到主机
  • 在任何WDT复位后,从traceport添加转储调试信息
  • 增加无效访问中断时缓存无效访问检测和触发紧急处理程序
  • 做核心转储到闪存时的额外的健康检查
  • RWDT用于重启系统,以防紧急处理程序崩溃
  • 提高核心转储脚本的鲁棒性

单元测试

  • 修复单元测试应用程序中不正确的CR + LF序列
  • 在所有组件目录中查找TEST_COMPONENTS(#354)
  • 修复单元测试应用程序以与测试文件中相同的顺序打印测试

文档

  • 入门指南现在是ESP-IDF文档的一部分
  • 自动生成API参考列表/ Doxygen指令
  • 修改Windows安装程序安装脚本以修复各种问题,使用最新的工具链。
  • 添加Espressif提供的dev板和模块的说明

  • 添加API以获取芯片信息
  • 支持从EFUSE或特定于应用程序的存储加载自定义MAC地址
  • 在ESP-IDF中支持集成闪存的ESP32-D2WD。
  • 修复HTTP
    [S]请求示例(#500)的问题
  • 在示例中标准化文件,符号等的命名
  • 修正发布版本中由ESP_ERROR_CHECK(变量)生成的警告(#497)

获取v2.1

由于我们使用git子模块,附加到此版本的源文件将无法正常工作。改为使用以下方法之一:

使用git

要获取此版本,请使用以下命令:

git clone https://github.com/espressif/esp-idf.git esp-idf-v2.1
cd esp-idf-v2.1/
git checkout v2.1
git submodule update --init --recursive

这是获取ESP-IDF的v2.1的推荐方法。

下载包含子模块的存档

此版本附有esp-idf-v2.1.zip档案。它包括.git目录和所有子模块,所以可以开箱即用。此存档是为具有连接问题的用户提供的,从而阻止它们从Github克隆。

下载

  • 135
    MBesp-idf-v2.1.zip
  • 源代码(zip)
  • 源代码(tar.gz)