【问题标题】:Sound string declaration hangs Arduino compiler声音字符串声明挂起 Arduino 编译器
【发布时间】:2012-03-10 09:00:04
【问题描述】:

我有一串来自 8 的字符,但我正在尝试将 WAV 文件导入到我的 Arduino 项目中。我这样声明

const unsigned char sounddata_data[] PROGMEM = "€€[fill these brackets in with 6500 other characters]";

当我尝试运行此代码时,编译器不会给我任何错误。它只是挂起并且永远不会完成编译。我知道这是这一行,因为如果我用较短的字符串或其他类型的声明(例如在每个字符之间放置逗号)声明它,它就可以工作。

Arduino 代码中是否存在阻止我的行长限制?

如果我必须接受这一点并在每个字符之间加上逗号,有什么好的方法吗?

我总是可以编写一个简单的程序来执行此操作,但我有许多声音文件要转换,我想让阅读代码变得容易和简单。

编辑

我最终只是编写了程序。它将每个数据字节转换为以逗号分隔的ints。旧方法行不通仍然让我感到困扰,这样会花费更多时间,但至少我有一些可以依靠的东西

#include <stdio.h>
int main(int argc, char *argv[]) {
    FILE *r, *w;
    unsigned char ch;
    r = fopen(argv[1], "rb");
    w = fopen("out.txt", "w");
    while (fscanf(r, "%c", &ch) != EOF) {
        fprintf(w, "%d, ", (int)ch);
    }
    return 1;
}

【问题讨论】:

    标签: c string audio arduino wav


    【解决方案1】:

    如果是行长问题,那么你可以像这样分解字符串:

    const unsigned char sounddata_data[] PROGMEM = "€€[fill these brackets "
                                                   "in with 6500 "
                                                   "other chars]";
    

    【讨论】:

    • 我只是尝试将其拆分。它给了我一个新的错误。 \u0081 不是通用字符。 Arduino 似乎很挑剔……
    • 我认为只有 ASCII 字符在字符串文字中是有效的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2018-07-09
    相关资源
    最近更新 更多