首页 > 解决方案 > 使用 make 命令编译引导加载程序 (ATMEGA2560) 时出现问题

问题描述

从上周开始,我正在为 arduino mega 工作 OTA 系统。我有一个从 SD 卡刷新固件的引导加载程序。这是 github 存储库的链接https://github.com/FleetProbe/MicroBridge-Arduino-ATMega2560/tree/master/hardware/microbridge

根据引导加载程序 SD 卡芯片选择引脚的自述文件,应连接到arduino mega的数字引脚 53 。当我为 SD 卡的芯片选择定义引脚 D53 时,它工作正常。问题是我想将 SD 卡的默认芯片选择引脚从 D53 更改为 D44。

而自述文件(点击这里阅读自述文件)是说如果你想改变默认的CS pin(即53),你需要改变asmfunc.S中的pinout并重新编译引导加载程序。

要编译引导加载程序,我使用 microchip studio 命令提示符并制作命令。make 命令如下:

但它给出了我不明白的错误。这是命令提示符的屏幕截图。在此处输入图像描述.

以下是我用来完成OTA系统的东西:

这是我在刻录引导加载程序后使用的代码片段:

#include <SPI.h>
#include <SD.h>
#include <avr/wdt.h>
#include "EEPROM.h"

#define sdcs 44

void setup()
{
   Serial.begin(9600);

   /*----(Initialise sd Module)-----*/
   if (!SD.begin(sdcs)) 
   {                       
      Serial.println(F("Card failed, or not present"));
   }
   else
   {
      Serial.println(F("card initialized."));
   }

   Serial.println("Press 'F' and 'enter' to set flagbit in eeprom 0x1FF to 0xF0 ");
   Serial.println("also to induce watchdog timeout which triggers the bootloader ");
   Serial.println("and flashes the new firmware on the sd card");
}
void loop()
{
   char inChar = '\0';

   while (Serial.available() > 0) 
   {
     inChar = Serial.read();
   }
   wdt_enable(WDTO_500MS); // have the wdt reset the chip

   // if 500ms passes without a reset
   if (inChar == 'F') {
   Serial.println("");
   Serial.println("rebooting and flashing with firmware.bin on sdcard");
   EEPROM.write(0x1FF, 0xF0);
   wdt_reset();
   delay(600); // wait 600ms to timeout wdt
   }
}

以下是引导加载程序目录中存在的文件: 在此处输入图像描述

需要帮助。提前致谢!

标签: arduinoembeddedbootloaderota

解决方案


.cof 是一种目标文件,但查看您的构建文件夹,看起来构建正在创建一个 .elf 目标文件而不是 .cof。修改 make 文件以更正目标,或者make all如果这是您的工具链打算生成的,则可能运行该文件以创建 .cof 文件。

也就是说,make clean在任何情况下都不应该因丢失文件而失败——该项目可能已经“干净”了。它只是删除构建工件以强制完全重新构建的一种方式 - 如果这些工件不存在,那并不是真正的问题,因为目的只是在任何情况下删除它们。


推荐阅读