Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 04.09.2011, 12:33  
yellow87
Вид на жительство
 
Аватар для yellow87
 
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
yellow87 на пути к лучшему
По умолчанию Синтаксис ССS

Всем привет!
Код:
void CheckPin(int pinX, n)
{
if( INPUT(pinX) != predstatus[n] ) // если состояние входа изменилось
.................................. // выполним некоторые операции
}

void main(void)
{
............. // инициализация
CheckPin(PIN_A0, 0);
CheckPin(PIN_B1, 9);
CheckPin(PIN_C3, 17);
CheckPin(PIN_D1, 23);
CheckPin(PIN_E0, 28);
..................
}
При компиляции получаю ошибку в первой строке функции CheckPin
Error27: Expression must evaluate to a constant::
Если использовать требуемые константы:
Код:
if( INPUT(PIN_A0) != predstatus[0])
то всё компилится нормально, но это ж ведь не правильно с точки зрения оптимизации и объёма получаемого в итоге кода
Реклама:
yellow87 вне форума  
Непрочитано 04.09.2011, 13:20  
bolek4321
Временная регистрация
 
Регистрация: 04.06.2010
Сообщений: 52
Сказал спасибо: 43
Сказали Спасибо 13 раз(а) в 7 сообщении(ях)
bolek4321 на пути к лучшему
По умолчанию Re: синтаксис ССS

Причем здесь "правильно-неправильно", читем help:
value = input (pin)
Pin to read. Pins are defined in the devices .h file. The actual value is a bit address. For example, port a (byte 5 ) bit 3 would have a value of 5*8+3 or 43 . This is defined as follows: #define PIN_A3 43 .

Т.Е. компилятор требует, чтобы в INPUT была указана константа из .h файла используемого МК.

Если же хочется переменную, то она должна принимать значение, равное этой константе:

The PIN could also be a variable. The variable must have a value equal to one of the constants (like PIN_A1) to work properly. The tristate register is updated unless the FAST_I0 mode is set on port A.

Т.Е. в функции нужно завести переменную и ей присваивать константу-номер ноги.

И касаясь оптимизации:
note that doing I/0 with a variable instead of a constant will take much longer time.

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

Последний раз редактировалось bolek4321; 04.09.2011 в 13:27.
bolek4321 вне форума  
Непрочитано 04.09.2011, 14:08  
yellow87
Вид на жительство
 
Аватар для yellow87
 
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
yellow87 на пути к лучшему
По умолчанию Re: синтаксис ССS

Пробовал я уже вместо константы её номер подставлять, но толку нет.
Да и с чего он будет, когда 43 #define PIN_A3
Сообщение от bolek4321 Посмотреть сообщение
Т.Е. в функции нужно завести переменную и ей присваивать константу-номер ноги.
А это вообще не пойму. Разве есть разница: это переменная в теле функции или только что в неё поступившая.
Написали б тогда уж код, раз так уверены в этом.

А пока я придумал сделать так:
Код:
m=INPUT(PIN_A0);
CheckPin(m, 0);

m=INPUT(PIN_B1);
CheckPin(m, 9);

m=INPUT(PIN_C3);
CheckPin(m, 17);
yellow87 вне форума  
Непрочитано 04.09.2011, 14:43  
bolek4321
Временная регистрация
 
Регистрация: 04.06.2010
Сообщений: 52
Сказал спасибо: 43
Сказали Спасибо 13 раз(а) в 7 сообщении(ях)
bolek4321 на пути к лучшему
По умолчанию Re: синтаксис ССS

Бред какой-то:

input возращает
- 0 (or FALSE) if the pin is low,
- 1 (or TRUE) if the pin is high

Какие там могут быть сравнения с 9 или 17?
bolek4321 вне форума  
Непрочитано 04.09.2011, 20:04  
yellow87
Вид на жительство
 
Аватар для yellow87
 
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
yellow87 на пути к лучшему
По умолчанию Re: Синтаксис ССS

предыдущее значение входа PIN_A0 находится в девятом бите, а PIN_C3 - в семнадцатом
yellow87 вне форума  
Непрочитано 04.09.2011, 20:23  
nonamedov
Почётный гражданин KAZUS.RU
 
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Синтаксис ССS

Сообщение от yellow87 Посмотреть сообщение
предыдущее значение входа PIN_A0 находится в девятом бите,
А вход PIN_A0 (или друго, без разницы) и есть девятый (или какой-то другой) бит, неужели так сложно прочитать help.

Сообщение от bolek4321 Посмотреть сообщение
Pin to read. Pins are defined in the devices .h file. The actual value is a bit address. For example, port a (byte 5 ) bit 3 would have a value of 5*8+3 or 43 . This is defined as follows: #define PIN_A3 43
nonamedov вне форума  
Непрочитано 04.09.2011, 20:43  
DK
Почётный гражданин KAZUS.RU
 
Аватар для DK
 
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,528
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
DK на пути к лучшему
По умолчанию Re: Синтаксис ССS

Сообщение от yellow87 Посмотреть сообщение
пока я придумал сделать так
кроме первой строки не будет работать. Состояние ноги может быть только "0", т.е. FALSE или не 0, т.е. TRUE. Что и возвращает макрос.
И непонятно, что делает CheckPin()?
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
DK вне форума  
Непрочитано 04.09.2011, 20:51  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Синтаксис ССS

Алгоритм изначально неправильный .
Я уж молчу о дребезге , но сравнивать значение бита с его номером - это что то новенькое.
С помощью Input() вы получаете значение пина , Заносите это значение в переменную ( флаги) . В следующей итерации снова проверяете пины и xor'те с предыдущем значением флагов.

Не нравятся встроенные функции используйте это :
Код:
   
  #byte  PortA=0x05
  #bit    Key1= PortA.0
......

  if(Key1) .........
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 04.09.2011, 20:53  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Синтаксис ССS

Сообщение от DK Посмотреть сообщение
И непонятно, что делает CheckPin()?
Сравнивает значение бита с его дефайном(порядковым номером)....
__________________
Осторожно , злой кот
dosikus вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RS485 и ССS Compiler Boris_Britva Микроконтроллеры, АЦП, память и т.д 8 09.05.2010 12:29


Часовой пояс GMT +4, время: 11:11.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot