我是Microchip编程的新手,但遇到了一些麻烦。 我需要使用MPLAB X IDE编写一个引导加载程序应用程序,但我不知道如何设置编译器/链接器来创建映射到内存正确区域的可执行文件。
查看组件的数据表,我可以看到以下地址:
程序闪存-> 0x1D000000-0x1D1FFFFF
引导闪存-> 0x1FC00000-0x1FC73FFF
如何创建使用引导闪存的程序?我需要更改哪些参数?在网上,我读到也许应该使用链接描述文件,但我不知道如何使用它们。
能否请您提供一些信息?
答案 0 :(得分:0)
我遇到了类似的问题。
最好的方法是使用Harmony框架为引导加载程序生成链接脚本,并为您的芯片提供正确的内存区域。
只需使用引导程序安装程序创建一个虚拟项目并进行编译,它将生成链接程序脚本。
一旦获得了链接脚本,就可以将其导入项目中。
您还需要对应用程序代码执行相同的操作,因为由于初始化区域的原因,链接器也有所不同。
答案 1 :(得分:0)
最好的方法是使用ezbl项目作为基础,然后根据需要进行更改。 Ezbl引导加载程序并不简单,但这是最安全的方法。
来自https://www.microchip.com/SWLibraryWeb/product.aspx?product=Microchip%20Easy%20Bootloader
EZBL功能
支持的目标
•具有双分区功能的目标上的单分区和双分区引导加载拓扑示例
•通用代码集支持所有32位PIC32MM和16位PIC24 / dsPIC33器件,但不包括PIC24F [V] xxKxx系列
•具有实时更新的双重分区,可确保时间和状态敏感的应用程序连续性
代码重用
•透明的Bootloader功能,ISR和来自执行应用程序的变量访问
•现有代码可以集成到Bootloader或Application项目中,而无需进行重大更改
•随时可用的面向文件的推/拉和板载内存引导程序-可以适用于无线(OTA)和芯片到芯片设计
自动创建链接描述文件
•无需维护.gld / .ld文件或了解GNU ld语法
去耦通信
•以2线UART和I2C从协议为例
•USB Mass Storage拇指驱动器引导加载(USB主机/ MSD类)
•可扩展至多节点面向广播的通信总线的被动式自识别协议
•多个外围设备实例和外围设备类型可以同时侦听固件更新
•进行分区以方便客户和第三方协议的添加
严厉的自我保护
•Flash擦除/写入例程可自我了解Bootloader的几何形状
•外部给出破坏性命令时,引导加载程序不会擦除或破坏自身
•不会尝试执行已损坏或部分引导的应用程序
•使用可重复使用的API进行CRC32通信和图像完整性检查
中断向量管理
•IVT条目转发到应用程序空间中的优化中断转到表
•引导加载程序和应用程序可以与各个运行时选择共享任何中断向量
•不需要AIVT或引导段(BS)硬件支持
应用程序支持功能
•优化的通用64位时间测量和任务调度API
•闪存擦除/写入API,可独立于应用程序升级而进行数据EEPROM仿真和内容保存
•具有中断/非阻塞,轮询,超时和回调通知功能的多实例FIFO缓冲API
专为无硬件需求的性能而设计
•延迟自适应软件流控制可承受蓝牙或TCP / Internet传播延迟,而无需硬件RTS / CTS或边带信令
•.hex内容在生成时自动转换为较小的二进制.bl2图像,具有改进的标识,版本和错误检测功能
•Bootloader通信中断上的软件FIFO允许高吞吐量
代码保密兼容
•操作不受ICSP Code Protect的影响
•Bootloader不会公开程序存储器或RAM进行外部回读
•内部CRC32计算促进了外部程序验证/版本识别
具有免费Microchip许可证的完整源代码
•没有GNU GPL代码污染或需要独立许可的第三方代码
•脚本可访问的便携式C PC命令行通信可执行文件,可用于品牌GUI包装和重新分发