roboforum.ru

Технический форум по робототехнике.

помогите разобратся

помогите разобратся

inc » 13 ноя 2009, 13:28

Написал на С программу в Codevision с ипользованием флагов размером в 1бит и вот такими IF:
if((in_work==0)&&(time_work_set==1)&&(time_pause_set==0)
программа нормально компилируется , но работать не хочет в отладчике видно, что она на ифы тупо забивает и идет
дальше.
Подскажите в чём дело как этим боротся?
Вложения
dizel.rar
(3.29 КиБ) Скачиваний: 9

Re: помогите разобратся

Duhas » 13 ноя 2009, 13:46

мне вот интересно где флаги эти хранятся после компиляции )

а по теме - хз ) я давно на сях не пишу.. но явных косяков не вижу..

Re: помогите разобратся

EdGull » 13 ноя 2009, 13:49

inc дай внятное название теме, иначе получишь предупреждение.

Re: помогите разобратся

Master » 13 ноя 2009, 13:59

По моему, такие записи не корректны, нельзя в дефайнах писать через ";" команды
Код: Выделить всёРазвернуть
#define sound_on TCCR0=0x3D;TCNT0=0x00;OCR0=0xFA
#define  sound_down TCCR0=0x00; TCNT0=0x00;OCR0=0x00
#define time_start TCCR1A=0x00; TCCR1B=0x05;TCNT1H=0x00;TCNT1L=0x00;ICR1H=0x00;ICR1L=0x00;OCR1AH=0x3A;OCR1AL=0x98;OCR1BH=0x00;OCR1BL=0x00
#define time_stop TCCR1A=0x00;TCCR1B=0x08;TCNT1H=0x00;TCNT1L=0x00;ICR1H=0x00;ICR1L=0x00;OCR1AH=0x3A;OCR1AL=0x98;OCR1BH=0x00;OCR1BL=0x00


Добавлено спустя 5 минут 22 секунды:
Попробуй закоментировать строчку, кажется в ней прога будет зависать.

Код: Выделить всёРазвернуть
while(start_butt==0){}

Re: помогите разобратся

SSG » 13 ноя 2009, 14:11

А у меня ругается вот как:
Вложения
Error.png
Error.png (3.04 КиБ) Просмотров: 1585

Re: помогите разобратся

Master » 13 ноя 2009, 14:16

А как ты его компилишь, он же выложил тока сишный файл, а остальных нету?

Re: помогите разобратся

inc » 13 ноя 2009, 15:02

сейчас выкладываю весь проект. Спасибо, но почему он в ифы не заходит? (while(start_butt==0){}-работает как и должно)
p.s.извиняюсь за дублирование темы- запарился.
Вложения
code_vis.rar
проект
(59.85 КиБ) Скачиваний: 7

Re: помогите разобратся

Master » 13 ноя 2009, 15:40

while(start_butt==0){}-работает как и должно

А не получается что когда start_butt=0 вы в этой процедуре весите и до ифов дело не доходи или он их игнорирует даже если кнопка не нажата?
И в чем вы симулируете?

Добавлено спустя 3 минуты 34 секунды:
Для начала нужно удалить запятые везде после фигурных скобок
};
После них точка с запятой после них никогда не ставится, и очень странно что ваш CV не выдал ошибки.

Re: помогите разобратся

Michael_K » 13 ноя 2009, 15:58

кодевиженом не пользуюсь, поэтому только по стандартному Си.

1. Как минимум точки с запятой наставить после дефайнов, где несколько команд.
А вообще принято так
#define sound_on() {blabla=77; count++; PORT|=0x55;}

2. Точки с запятой после фигурных скобок лишние не бывают.
(вообще по стандарту точки с запятой можно лишние втыкать между операторами - это не ошибка,
поэтому компилер и не ругается, и не должен).

3. Посмотреть как определен бит в хедерах у кодевижена.
Вполне вероятно, что через чар, тогда сравнивать его с единицей
(а может и нулем - от реализации зависит) некорректно.

Правильнее, имхо, писать так: if((bit1)&(!bit2)).
Но лучше понять как в кодевижене реализован тип бит.
Последний раз редактировалось Michael_K 13 ноя 2009, 16:31, всего редактировалось 1 раз.

Re: помогите разобратся

Master » 13 ноя 2009, 16:06

2. Точки с запятой после фигурных скобок лишние не бывают.
(вообще по стандарту точки с запятой можно лишние втыкать между операторами - это не ошибка,
поэтому компилер и не ругается, и не должен).

У меня ругается, значит это заморочки CV.

Re: помогите разобратся

inc » 13 ноя 2009, 16:55

спасибо, буду дальше разбиратся

Добавлено спустя 10 минут 58 секунд:
да, точно bit определяется через char,и как можно поступить в данном случае?

Re: помогите разобратся

Master » 13 ноя 2009, 17:05

юзайте не bit, а char, памяти вроде хватит.

Re: помогите разобратся

SSG » 13 ноя 2009, 17:45

Набросал тестовую программку под Atmega 8 с двумя флагами и одним ифом. Все откомпилировалось и в VMLab нормально работает (в ифы заходит).

Добавлено спустя 1 минуту 23 секунды:
Master писал(а):юзайте не bit, а char, памяти вроде хватит.

Действительно. Можно все флаги в один или несколько чаров собрать и устанавливать-читать только нужные биты байта.


Rambler\'s Top100 Mail.ru counter