Arduino 的新运算符

2023-12-08

有人告诉我(特别是在一个答案Arduino 上的 C++ 标准库,以及 Stack Overflow 问题中C++ 字符串和 Arduino 字符串。如何将它们结合起来?)) Arduino 编译器没有实现new操作员。不过,我已经为 Arduino(在 Arduino IDE 中)编写了一个使用它的程序,并且运行良好。

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

void loop() {
    char* array;
    char c;
    unsigned arraySize;

    Serial.write("Enter a 1 digit number.\n");

    do {
        c = Serial.read();
    } while(c < '0' or c > '9');
    arraySize = c-'0';

    Serial.write("You wrote ");
    Serial.write(c);
    Serial.write(".\n");
    Serial.write("Now enter ");
    Serial.write(c);
    Serial.write(" lower-case letters.\n");

    array = new char[arraySize];

    for (unsigned i = 0; i < arraySize;) {
        array[i] = Serial.read();
        if (array[i] >= 'a' and array[i] <= 'z')
            i++;
    }

    Serial.write("You entered: ");

    for (unsigned i = 0; i < arraySize; i++) {
        Serial.write(array[i]);
        Serial.write(" ");
    }
    Serial.write("\n");
}

以下是演示其功能的示例输出:

Enter a 1 digit number.
You wrote 5.
Now enter 5 lower-case letters.
You entered: h e l l o
Enter a 1 digit number.
You wrote 9.
Now enter 9 lower-case letters.
You entered: w a s s u p m a n
Enter a 1 digit number.
You wrote 9.
Now enter 9 lower-case letters.
You entered: h o w y a d o i n
Enter a 1 digit number.
You wrote 4.
Now enter 4 lower-case letters.
You entered: c o o l
Enter a 1 digit number.
You wrote 7.
Now enter 7 lower-case letters.
You entered: i t w o r k s
Enter a 1 digit number.

那为什么我总是听到这个?这些人是错的,还是我只是误解了他们的意思?


new and delete被定义为 Arduino 发行版的一部分:/usr/share/arduino/hardware/arduino/cores/arduino/new.h:

/* Header to define new/delete operators as they aren't provided by avr-gcc by default
   Taken from http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=59453 
 */
#ifndef NEW_H
#define NEW_H

#include <stdlib.h>

void * operator new(size_t size);
void operator delete(void * ptr); 

__extension__ typedef int __guard __attribute__((mode (__DI__)));

extern "C" int __cxa_guard_acquire(__guard *);
extern "C" void __cxa_guard_release (__guard *);
extern "C" void __cxa_guard_abort (__guard *); 

extern "C" void __cxa_pure_virtual(void);

#endif

The new.h包含在Printable.h所以你可以在你的 Arduino 基本包含中得到它。不过,AVR Libc 中并未定义这些运算符。我对这些设计选择的解释:Libc 的人认为这是一个坏主意,而 Arduino 的人则注重易用性:如果你愿意new and delete,请拥有它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Arduino 的新运算符 的相关文章

随机推荐

  • 创建仅包含给定类的对象的数组

    好的 我有下面的代码 Objective C FYI 我想知道是否要创建一个 NSMutableArrayc data对象 我该怎么做呢 这有点像声明一个List
  • 如何将用户输入保存在数组中?

    我正在尝试编写一个程序 要求用户输入要保存在医院数据库中的患者数量 即ArraySize 用户必须输入患者的 ID 名字和姓氏 然后根据患者病情的严重程度在数组中对患者的 ID 名字和姓氏进行索引 我的问题是如何将用户输入的 ID 保存为整
  • 测试非默认 App Engine 任务队列

    App Engine 文档给出了example单元测试任务队列 这对于 默认 队列工作正常 但我需要对非默认队列进行单元测试 我从以下行中得到异常 val qsi ltq getQueueStateInfo get non default
  • 当我保存文件时 Sublime Text 正在做什么?

    我正在观看文件fsnotify这是一个Go库 我发现保存文件时会触发很多事件 为什么 Sublime Text 有这么多功能 2013 12 17 20 46 25 event parser go MODIFY 2013 12 17 20
  • 如果另一个值不存在,如何根据一个值从表中选择项目? (雄辩/sql)

    我有一个表 用于存储网站的不同文本块 我目前正在为每个页面选择正确的块以及页面的标题和首选语言 当首选语言不可用时 我想在后备语言中选择相同的文本块 具有相同的标题 块表 columns id slug title language con
  • java.lang.UnsatisfiedLinkError:dlopen 失败:

    当我在项目中添加 so 文件时 我遇到了这个问题 从其他答案来看 我尝试了不同的解决方案 但没有任何解决方案可以帮助我 case 1我曾尝试将 so 放入 src main jniLibs 中 并在 gradle 文件中添加以下行 但出现相
  • 在Java中,当另一个音频文件开始使用key_events时,如何停止前一个音频文件

    我知道 Clip stop 方法 但是当我将它放在 key events 中时它似乎不起作用 它只会导致错误 好吧 我知道为什么会导致错误 因为我要求它基本上停止几行之后才存在的剪辑 但是使用相同的逻辑或接近它 如果可能 我如何重新编码 以
  • Nullable Bool 的编译器错误

    bool ispurchased null var pospurcahsed ispurchased 1 2 它产生异常 无法隐式转换类型 bool 布尔 明确的 存在转换 您是否缺少演员表 我在这里做错了什么 感谢您的支持和考虑 这是不允
  • 如何一次性删除文件和应用程序数据容器值?

    我的应用程序中有一个重置功能 可以将应用程序恢复到默认状态 因为我需要删除我创建的四个文件并删除我在ApplicationDataContainer 这就是我删除文件的方法 try StorageFile file await localf
  • 在 swift 5 中隐藏或禁用 uidocumentinteractioncontroller 的共享按钮

    在我的应用程序中 我使用 QuickLook 框架来查看文档文件 例如 pdf ppt doc 等 但出于隐私考虑 我不希望用户可以与其他人共享此文档 所以请让我知道如何禁用 隐藏共享按钮以及复制粘贴选项 我知道这个问题可以被问很多次并尝试
  • 查找汉明数 - 不是代码或距离

    我目前正在学习C 我在寻找汉明数 numbers其质因数小于或等于 5 当我输入一个数字时n 程序应该输出n th 汉明数 输入和输出以下数字 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6
  • 配置 NUnit 命令行以运行 MonoTouch 测试

    我的 MonoTouch 项目中有一个单元测试 但无法从 MonoDevelop 内部运行 它因 Unix 传输错误 而失败 在网上查了一下 这似乎与 NUnit 测试运行程序崩溃有关 所以我想我应该尝试使用命令行测试运行程序 我使用 Mo
  • 如何以 .m4a 格式录制语音

    我已经创建了一个 iPhone 应用程序来录制 它将记录在 caf 文件中 但我想以 m4a 格式录制 请帮助我做到这一点 Thanks 下面是一个替代代码示例 它将文件编码为 m4a 中的 AAC NSArray dirPaths NSS
  • VSCode 在 React 代码中的 HTML 标签内添加空格

    当我保存下面的代码时 开始从头开始学习 React VS Code 将其格式化为如图所示 ReactDOM render div h1 Hi there name h1 p your lucky number is num p div do
  • 如何使用apache poi从java中的docx中删除包含数据的表格和段落

    我有一个单词模板 其中有多个相似的表格以及与放置在它们前面的这些表格相关的一些段落 根据数据量 我填充了一些表格 其他的不需要 所以有段落 我需要删除这些表格和段落 正如您在图片中看到的 我需要删除表 2 及其段落表段落 请帮助我该怎么做
  • Lua中如何将GPS坐标转换为十进制?

    我需要使用 Lua 将 GPS 坐标从 WGS84 转换为十进制 我确信以前已经完成过 所以我正在寻找代码片段的提示 更正的问题 在Lua中将DMS 度分秒 转换为DEG 十进制 度 的代码 例子 维也纳 dms 48 12 30 N 16
  • 将 Airflow 中的操作参数中的 jinja 模板格式化为 INT

    我正在尝试将 jinja 模板参数格式化为整数 以便我可以将其传递给需要 INT 可以是自定义或 PythonOperator 的运算符 但我无法这样做 请参阅下面的示例 DAG 我正在使用内置的 Jinja 过滤器 int但这不起作用 类
  • 无法初始化链接服务器的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象

    我正在尝试建立一个链接服务器SQL Server 2008 R2 to an Access database The Access database不受密码保护 正如我在其他帖子中看到的 特别是这个 这通常是由于当前用户无权访问 Netwo
  • Python 中是否有一种简单且首选的德语数字字符串格式化方法?

    我正在寻找德国数字格式的正确方法 例如1 000 1234 在 Windows 操作系统下的 Python 中 I tried locale setlocale但没有成功 相反 我编写了一个函数来提供所需的输出 有没有更好的办法 def g
  • Arduino 的新运算符

    有人告诉我 特别是在一个答案Arduino 上的 C 标准库 以及 Stack Overflow 问题中C 字符串和 Arduino 字符串 如何将它们结合起来 Arduino 编译器没有实现new操作员 不过 我已经为 Arduino 在