Индексирование массива и переполнение счетчика - PullRequest
0 голосов
/ 06 июля 2019

У меня есть счетчик, который измеряет удары.Я выделил 3 байта в микроконтроллере, что означает, что я считаю до 16777216. Я хочу сохранить счет, но так как мой счет выходит за пределы 255, младший бит массива сбрасывается в ноль, и я застрял, как увеличивать до следующего элемента массива, увеличиваяколичество

Я пробовал

 Counterarray[strokelsb] = strokecount;
if(strokecount > 255)
  Counterarray[strokemid] = strokecount |Counterarray[strokelsb] ;


  Counterarray[strokelsb] = strokecount;
if(strokecount > 255)
  Counterarray[strokemid] = strokecount |Counterarray[strokelsb] ;

Ожидаемый результат

Counterarray[strokelsb] = oxFF
 Counterarray[strokemid] + Counterarray[strokelsb] = 4095

1 Ответ

4 голосов
/ 06 июля 2019

Я не уверен, что это за переменная strokecount и каков тип этой переменной.Вам не нужна эта переменная, чтобы иметь 3-байтовый счетчик.

Приведенный ниже счетчик будет отсчитывать от 0 до 16777215 и переворачиваться.

if (//counter logic for one tick over)
{
    Counterarray[strokelsb]++;
    if (Counterarray[strokelsb] == 0x00)
    {
        Counterarray[strokemid]++;
        if (Counterarray[strokemid] == 0x00)
        {
            Counterarray[strokemsb]++;
        }
    }
}
...