【问题标题】:Resetting Arduino via code通过代码重置 Arduino
【发布时间】:2016-12-01 18:08:24
【问题描述】:

我已经研究了十几种不同的方法来重置我的 arduino,从将引脚连接到重置引脚和陪审团操纵奇怪的代码位。 它们都不起作用。

似乎每个人都在使用的代码是

void software_Reset() // Restarts program from beginning but does not reset the peripherals and registers
{
asm volatile ("  jmp 0");  
} 

我的 arduino 用

回应

C:\Users\Leonardo\AppData\Local\Temp\ccGUYdTQ.s:2259:错误:错误 指令`jmp 0'

然后上传代码失败。我不知道该怎么办。我的完整代码可以在这里找到http://pastebin.com/CA2Ms2hB,但它很大,我不确定它是否会有所帮助。

如果有人能帮助我理解为什么 software_Reset();我真的很感激,我已经走到了尽头。

(如果您有其他方法来重置 arduino,我很乐意尝试)

【问题讨论】:

  • 现在arduino 不会自动成为 UNO 或至少是 atmega 8 位控制器。对于那些人来说,jmp 0 是否真的比滥用看门狗更糟糕是值得商榷的,但两种方法都应该有效
  • jmp 之前是否有一些不可打印的字符?我知道 arduino,但是(我听说)一些汇编程序对需要从哪个列指令开始很挑剔。
  • 您必须阅读可用的文档以查看 1) 汇编语言指令或 2) 其他宏可用于执行此操作。每个控制器都不同。如果有,请使用它。如果一个都没有,你就做不到。我曾经使用过的每个 Atmel 控制器都有一个配套文档,其中概述了它支持的特定组装指令。

标签: arduino


【解决方案1】:

在基于 ARM 的微控制器上,您可以致电 NVIC_SystemReset()

所有基于 ARM 的微控制器都需要实现。

这很有用,因为地址 0 处的 resetFunc() 可能不适用于基于 ARM 的较新微控制器。

【讨论】:

    【解决方案2】:

    我认为您正在尝试在您的 arduino 代码编辑器中编写汇编代码。 让我告诉你一件事。 Arduino 代码编辑器默认不支持汇编语言代码。您可以通过以下提到的过程在 arduino 代码编辑器中编写汇编语言代码:

    注意:我们将修改 arduino 源代码来做到这一点。

    1. 获取 Arduino IDE 的源代码:https://github.com/arduino/arduino

    2. 解压下载的zip文件,会得到一个名为Arduino-master的文件夹

    3. 在您选择的文本编辑器中打开 Sketch.java 文件。 sketch.java的位置是:Arduino-master/app/src/processing/app/Sketch.java

    4. 插入 .s 功能:

      一个。搜索:sc.isExtension("c");

      你会看到这样的:

      //3. then loop over the code[] and save each .java file
      
      for (SketchCode sc : code){
          if(sc.isExtension("c") || sc.isExtension("cpp") || sc.isExtension("h")){
              //no pre-processing services necessary for java files
      

      b.在 if 条件的末尾添加 sc.isExtension("s")。现在您的代码应如下所示:

      //3. then loop over the code[] and save each .java file
      
      for (SketchCode sc : code){
          if(sc.isExtension("c") || sc.isExtension("cpp") || sc.isExtension("h") || sc.isExtension("s")){
              //no pre-processing services necessary for java files
      
    5. 搜索:String[] getExtensions()

      你会看到一些类似这样的代码:

      /**
        * Returns a String[] array of proper extensions.
        */
      public String[] getExtensions() {
          return new String[] { "ino", "pde", "c", "cpp", "h" };
      }
      

      在返回的数组中插入“s”。所以,现在你的代码应该是这样的:

      /**
        * Returns a String[] array of proper extensions.
        */
      public String[] getExtensions() {
          return new String[] { "ino", "pde", "c", "cpp", "h", "s" };
      }
      
    6. 保存 Sketch.java

    7. 在您选择的文本编辑器中打开 Compiler.java。 Compiler.java的位置是:Arduino-master/app/src/processing/app/debug/Compiler.java

    8. 搜索:compileFiles(

      在命令 findFilesInFolder() 中,将大写的 S 替换为小写的 s

    9. 重复第 8 步:3 次以上...(共 4 次)

    10. 保存 Compiler.java 文件

    11. http://www.oracle.com下载最新版本的java SE 8u111

    12. 下载并安装任何 java 命令行工具。但我会推荐 Apache ANT。

      如果您是 Windows 用户:

      如果您是 Mac 用户:

      • 您需要使用 Homwbrew 安装它:

      • 要安装 Homebrew:

        ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
        
      • 然后安装 Apache ANT:

        brew install ant
        
    13. 在命令行中转到Arduino-master/build的目录

    14. 使用:ant build 构建 Arduino IDE,应以“构建成功”消息结尾。

    15. 使用以下方式打包 Arduino IDE:ant dist

      它会要求您输入版本号并给出建议,例如 [0105]。只需输入带有点和 asm 的建议数字。例如:如果建议是 [0105] 则输入:1.0.5.asm

      此命令可能需要 6 到 10 分钟才能完成。 (取决于你的电脑速度)

      那你一定要构建成功!!!

    16. 支持汇编语言编程的Arduino IDE可以在新建的.zip文件中找到

    17. 解压缩文件并安装 Arduino IDE 应用程序。

    现在,您应该能够编写汇编程序而不会在 Arduino IDE 中出错。

    如果您有任何问题,请随时提出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 2010-10-27
      • 1970-01-01
      相关资源
      最近更新 更多