首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多维数组的用法

多维数组的用法
EN

Stack Overflow用户
提问于 2021-10-31 17:54:06
回答 1查看 47关注 0票数 0

我正在和Arduino一起造一个红外线遥控器。红外发射器的每个命令都存储为基于RC-5标准的逻辑信号的微秒延迟数组。

例如:

代码语言:javascript
复制
// Command #1866: Command:$1865
// Protocol: RC5, Parameters: D=30U F=10U
const uint16_t repeat_Command__1865[] PROGMEM = { 889U, 889U, 1778U, 1778U, 889U, 889U, 889U, 889U, 889U, 889U, 1778U, 889U, 889U, 889U, 889U, 1778U, 1778U, 1778U, 1778U, 65535U };

因为我想首先检查哪些命令在我想要控制的设备上有效,所以我想检查RC5标准中的每一个可用命令。它的5位地址和6位命令导致了大约2000个我需要检查的命令。我用一个名为IRScrutinizer的程序员生成这些命令,当我给它设备地址(1-15)和命令(1-63)时,它会输出微秒级的延迟。它生成上面的代码。我有一种方法可以通过脚本生成所有的2000个命令。所以我有2000个数组,命名为:repeat_Command_{命令数}

正如我现在所读到的,在c++中,没有一种简单的方法可以通过定义变量名称的变量来访问变量。

因此,我需要在for循环中的所有命令之间切换case,如下所示:

代码语言:javascript
复制
void loop() {
    Serial.println(F("Looping trough all Numbers"));
    for (int i = 0; i<1983;i++)
    {
      delay(1000)
    }
    switch (i) {
    case 1L:
        sendRaw(repeat_Command_, 24U, 36U);
        break;
    case 2L:
        sendRaw(repeat_Command__1, 22U, 36U);
        break;
    case 3L:
        sendRaw(repeat_Command__2, 24U, 36U);
        break;
.
.
.

但这会占用大量内存供Arduino处理。因为我使用的是Progmem,所以问题只是switch case参数。

我的想法是将命令存储在多维数组中,然后访问forloop中的每个“行”。

但是我该怎么做呢?

当我尝试的时候:

代码语言:javascript
复制
const uint16_t commands[1][] PROGMEM = {1,2,3,4};

const uint16_t commands[2][] PROGMEM = {5,6,7,8};

这不起作用,我也不希望它起作用,但我不知道我的数组方法是否足够好做到这一点。

我得到一个错误:

代码语言:javascript
复制
declaration of 'commands' as multidimensional array must have bounds for all dimensions except the first

问题是每个命令的长度不是固定的。

另一种方法是在for循环中生成微秒数组。但这是一个完全不同的逻辑问题,我宁愿不去解决:D

EN

回答 1

Stack Overflow用户

发布于 2021-10-31 18:21:18

看起来你被多维数组的语法弄糊涂了--你不能在多个地方声明相同的东西,然后期望它们被组合在一起。

您的简单测试用例必须这样编写:

代码语言:javascript
复制
const uint16_t commands[][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8}};

但只有当所有命令的长度都相同时,这才能起作用。(这是上面第二维中的4。) 2D数组存储在内存中紧跟前一行之后的每一行,因此每一行必须具有相同的大小。

一种解决方案是将每个命令存储在它自己的数组中,然后您可以使用另外两个数组(或结构数组)来存储命令的长度以及指向它们的指针。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69789187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档