首页 > 解决方案 > 如何重用对象,但参数不同?

问题描述

我在 ESP32 上制作了一个带有服务器和 Web 界面的韦根计算器。

我的问题是,每次我输入另一个小数时,我都必须创建另一个对象,我不确定这是否安全,因为 ESP32 上的内存量有限,而且我不认为永远创建对象是最佳实践。

我有一个带有构造函数的类,该构造函数获取十进制数并将其转换为 Wiegand 26 位二进制数:

class Wiegand {
  private:
    std::vector<bool> wiegandArray = std::vector<bool>(26, false);
    uint8_t facilityCode;
    uint16_t cardNumber;
    void calculate(uint32_t dec) {
      // transform dec number into binary number using single bit shift operation
      // and store it in wiegandArray[]
      for (int i = 24; i > 0; --i) {
        wiegandArray[i] = dec & 1;
        dec >>= 1;
      }
      // check for parity of the first 12 bits
      bool even = 0;
      for(int i = 1; i < 13; i++) {
        even ^= wiegandArray[i];
      }
      // add 0 or 1 as first bit (leading parity bit - even) based on the number of 'ones' in the first 12 bits
      wiegandArray[0] = even;

      // check for parity of the last 12 bits
      bool odd = 1;
      for(int i = 13; i < 25; i++) {
        odd ^= wiegandArray[i];
      }
      // add 0 or 1 as last bit (trailing parity bit - odd) based on the number of 'ones' in the last 12 bits
      wiegandArray[25] = odd;
    }
  public:
    Wiegand(uint32_t id) {
      calculate(id);
      facilityCode = id >> 16;
      cardNumber = id & 0xffff;
    }
    //returns a 26 length std::vector<bool>
    std::vector<bool> getWiegandBinary() {
      return wiegandArray;
    }
};

每次我得到一个新的十进制数时,我都会调用该构造函数:

std::vector<bool> _array;

void setup() {
//server initialization
//check for web parameters
if(p->name() == "getWiegand") {
            String wiegandID = p->value();
            Wiegand card(wiegandID.toInt());
            _array = card.getWiegandBinary();
            change = true;
          }
}
void loop() {
  if(change) {
    change = false;
    for(int i = 0; i<26; i++) {
      Serial.print(_array[i]);
    }
  }
}

此外,使用类进行这种转换实际上会使 ESP 上的事情变得更加困难。
每次在内部获得新值时,我都需要创建一个新对象,void setup()并且该对象不会在 中定义void loop(),因此我必须使用全局声明的变量,例如_array = card.getWiegandBinary();,才能getters从类中访问 。

我应该放弃分类并使用全局声明的函数和变量吗?

标签: c++

解决方案


推荐阅读