Перейти к содержанию
    

CodeVision ругается на масив бит

Подскажите плиз инициализирую переменные

int temp;
unsigned int i;
unsigned int f; 
bit s[64]; // масив из 64 бит
при компиляции пишет
missing ';'

подскажите плиз почему, хотя если напишу

int s[64]; все работает, но мне не нужно столько места в памяти если оперирую только 0 и 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Из-за особенностей адресации массивов в CV битовый массив нельзя сделать "в лоб". или используйте большое количество битовых переменных, или накладывайте маски :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ткните плиз в пример где можно посмотреть как это сделано, и второй важный вопрос, внутренний RC-генератор, обязательно калибровать, мне точно не особо нужна +- 10% вполне устроит например.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но мне не нужно столько места в памяти если оперирую только 0 и 1

 

Попробуйте перейти к битовым полям в структуре (правда не знаю поддерживает их cvavr)

 

struct stMyBits{
unsigned char bit0:1;
unsigned char bit1:1;
unsigned char bit2:1;
unsigned char bit3:1;
.............................
unsigned char bitN:1;
} MyBits;

 

Ну и доступ

 

MyBits.bit0=1;
MyBits.bit3=0;

 

RC-цепочку калибровать надо. Я в меге8 наблюдал почти 50процентное отклонение от 1МГц в сторону уменьшения.

Да и сложностей там никаких

OSCALL = калибровочная константа для выбранной частоты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А подскажите плиз, калбировка это для каждого камня отдельная или один раз откалибровал в прошивке на заданной температуре и напряжении питания и ок? И способ калибровки без частотомера не подскажите?

Изменено пользователем Vny4ek

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А подскажите плиз, калбировка это для каждого камня отдельная или один раз откалибровал в прошивке на заданной температуре и напряжении питания и ок? И способ калибровки без частотомера не подскажите?

 

калибровка с точностью до 10% только внутри одной партии. от температуры уплывает в одну сторону, но все равно не одинаково.

 

берете наручные часы - выводите мигалку на светодиод, считайте вспышки и меряйте секундомером..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Угу спасибо! еще такой вопрос, а фунции delay.h тоже завязаны на этом генераторе, тоесть он опирается на RCвнутренний когда их использует?

Изменено пользователем Vny4ek

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Угу спасибо! еще такой вопрос, а фунции delay.h тоже завязаны на этом генераторе, тоесть он опирается на RCвнутренний когда их использует?

При компиляции проекта в свойствах (Project - Configure) указываете тактовую частоту контроллера. Эта частота вашего тактующего источника, будет это RC, кварц или внешний источник - не играет роли. Библиотека delay.h основывается на той частоте, что указана в свойствах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

bit s[64]; // масив из 64 бит
...
int s[64]; все работает, но мне не нужно столько места в памяти если оперирую только 0 и 1

А зачем int? Используйте unsigned char (uint8_t).

Вы собираетесь использовать в прерываниях эти ваши флаги?

Если да. То битовые переменные, как и всё что больше или меньше байта - не лучший вариант.

Придётся всё это хозяйство оборачивать в critical sections для обеспечения атомарности.

Хорошее правило: для 8-ми битного MCU используй 8-ми битные переменные, конечно, если это возможно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...