Arduino如何编辑静态无符号短



我的问题是如何编辑静态无符号short。我对Arduino编码完全陌生,我不知道如何解决这个问题。

对不起我的英语。:(

因此,我在代码中有以下静态无符号短:
static unsigned short code[NUMBER_OF_KEYS][4] = { {634, 123, 124, 234},{111, 222, 333, 444} };

我现在想添加一个块,使变量看起来像这样:
static unsigned short code[NUMBER_OF_KEYS][4] = { {634, 123, 124, 234},{111, 222, 333, 444},{235, 213, 461, 192} };

我想删除一整块的数字。这样我就有了这个区块中的数字,我想删除其中节点相同的区块。

据我所知,您希望添加到static unsigned short code[NUMBER_OF_KEYS][4] = { {634, 123, 124, 234},{111, 222, 333, 444} };价值观{235, 213, 461, 192}

对你的问题的第一个解释是离线进行,然后在Arduino板上编译和运行你的程序。

您只需通过添加粗体部分来修改static unsigned short code[NUMBER_OF_KEYS][4] = { {634, 123, 124, 234},{111, 222, 333, 444} };即可。static unsigned short code[NUMBER_OF_KEYS+1][4] = { {634, 123, 124, 234},{111, 222, 333, 444},{235, 213, 461, 192},};可以在#define NUMBER_OF_KEYS VALUE部分中增加NUMBER_OF_KEYS。只需增加VALUE。定义节通常位于源文件的顶部。

在程序运行时修改它的第二个解决方案:您正在使用静态内存分配。它并没有连接到static unsigned char类型,而是连接到了=符号后面的内容。你是在告诉编译程序只为sizeof(char)*NUMBER_OF_KEYS*4字节分配内存。CCD_ 15等于16比特或等于2字节。简化为8*NUMBER_OF_KEYS字节。

您询问了如何向变量添加新节。因此,您将需要4*sizeof(short)*1更多字节的内存。

我的建议是将其声明为而不是静态变量类型,然后使用内存的动态分配到2注释指针。如有必要,您将在程序运行时为更多的值分配更多的内存,从源代码复制到新分配的内存,并在末尾(或其他地方(复制新值。不要忘记释放未使用的内存,然后将指针的值分配给变量。在所有这些之后,您将能够在程序运行时添加它。

static unsigned short code[NUMBER_OF_KEYS][4]声明将为该数据保留固定大小的内存。

因此,通过声明[NUMBER_OF_KEYS],您只能在限制为NUMBER_OF_KEYS的情况下进行操作。

非常简单的解决方案是为MAX可能数量的元素保留空间,并跟踪数组中实际键的数量
例如

constexpr int MAX_NUMBER_OF_KEYS = 10;
static unsigned short code[MAX_NUMBER_OF_KEYS][4];
int keysCount = 0;
// add keys: code[0] = {634, 123, 124, 234}
code[0][0] = 634; code[0][1] = 123; code[0][2] = 124; code[0][3] = 234;
keysCount = 1;
// remove keys from position 0
code[0][0] = 0; code[0][1] = 0; code[0][2] = 0; code[0][3] = 0;
keysCount = 0;

所以你可以在任何位置放置任何类型的密钥代码,并跟踪实际数字,这样就不会访问垃圾数据。这也需要处理消除间隙的问题。因此,如果您有代码[0]、代码[1]、代码[2]并正在删除代码[1],您可能希望将代码[2]移动到代码[1]的位置。

更好的解决方案是使用支持动态内存的C++。std::vector通常用于该目的。

// For individual Keys codes 
// so each KeysCode is entries {634, 123, 124, 234} or {111, 222, 333, 444}, etc
using KeysCode = std::array<unsigned short, 4>;
// Init
// 'code' would have 2 elements of respective KeysCode
std::vector<KeysCode> code = {{634, 123, 124, 234}, {111, 222, 333, 444}};
// add third element {235, 213, 461, 192} in the end
code.push_back(KeysCode{235, 213, 461, 192});
// erase code[1] by index, eg {111, 222, 333, 444}
code.erase(code.begin() + 1);
// find {634, 123, 124, 234} and erase it
auto removeIt = std::remove(code.begin(), code.end(), KeysCode{634, 123, 124, 234});
code.erase(removeIt, code.end());

最新更新