реклама на сайте
подробности

 
 
> cypress FX2 DemoBoard и светодиоды, запарило - не врубаюсь
torik
сообщение Jan 30 2007, 13:51
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Привет!

На плате с CY7C68013A от сайпраса хочу включить светодиоды D5-D2.
Компилятор - Кейл (в мювижене пишу)
В доке написано, что надо состряпать переменную
xdata volatile BYTE D5ON _at_ 0xB000;

а далее когда надо светодиод врубить:
BYTE dum;
dum = Diod5ON; //включение светодиоды

Блин, люди - не врубаюсь!!!! Нихрена не работает

а когда объявляю D5ON - вообще ошыбку дает, если делаю ее extern - то варнинг и всеравно них не работает...

Кто включал светодиоды на этой плате, подскажите...

При этом индикатор семисегментный и кнопки, подключенные по I2C работают нормуль...


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
torik
сообщение Jan 30 2007, 14:12
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



ах да - и через ассемблерную вставку
#pragma asm
mov dptr,#8000h
movx a,@dptr
#pragma endasm
все работает... Вопрос в том как это на СИ кейловском записать правильно?


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
jur
сообщение Jan 30 2007, 18:00
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 16-10-05
Пользователь №: 9 704



Цитата(torik @ Jan 30 2007, 12:51) *
В доке написано, что надо состряпать переменную
xdata volatile BYTE D5ON _at_ 0xB000;

а далее когда надо светодиод врубить:
BYTE dum;
dum = Diod5ON; //включение светодиоды
Блин, люди - не врубаюсь!!!! Нихрена не работает
Цитата(torik @ Jan 30 2007, 13:12) *
ах да - и через ассемблерную вставку
#pragma asm
mov dptr,#8000h
movx a,@dptr
#pragma endasm
все работает... Вопрос в том как это на СИ кейловском записать правильно?
По-моему ты просто ошибся в адресации: в Си адрес "0xB000", а в ассемблере "0x8000". Кроме того, в объявлении указано имя переменной "D5ON", а в теле программы ты используешь "Diod5ON". С этим нужно разобраться, чтобы не было варнингов. Уточни этот момент в каком-нибудь из их многочисленных примеров. С учетом этих замечаний оба варианта абсолютно идентичны.

P.S. Да, еще. Попробуй объявить "dum" вне функции (т.е. сделай эту переменную глобальной), т.к. если она дальше не используется, то компилятор вполне мог соптимизировать это место и вообще выбросить оператор присваивания. Кстати, очень полезно включить генерацию ассемблерного листинга и смотреть прямо в коде проблемные места.


--------------------
MPEG-4 - в массы!
Go to the top of the page
 
+Quote Post
torik
сообщение Jan 31 2007, 09:28
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



Да не - адрес можно и "0xB000" и "0x8000" - это просто разные светодиоды. Название переменных "D5ON" (очепятка в тексте сообщения)...

Дело в другом:
в файле fh2regs.h делаю объявление:
EXTERN xdata volatile BYTE D5ON _AT_ 0xB000;
рядом стоит объявление регистров данного камня:
..........
EXTERN xdata volatile BYTE RES_WAVEDATA_END _AT_ 0xE400;
............

где бы ни объявлял переменную "BYTE dum", на команду:
dum = D5ON;
компилер дает варнинги

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: D5ON
MODULE: bulkext.obj (BULKEXT)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: DUM
MODULE: bulkext.obj (BULKEXT)

Почему? При этом мерзко еще то, что на команду^
dum = RES_WAVEDATA_END;
Варнингов не идет, хотя отличий в объявах вроде и нету...

Так что вопрос по существу к тем кто разбирается в компиляторе....


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post
jur
сообщение Jan 31 2007, 11:43
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 16-10-05
Пользователь №: 9 704



Цитата(torik @ Jan 31 2007, 08:28) *
Да не - адрес можно и "0xB000" и "0x8000" - это просто разные светодиоды. Название переменных "D5ON" (очепятка в тексте сообщения)...

Дело в другом:
в файле fh2regs.h делаю объявление:
EXTERN xdata volatile BYTE D5ON _AT_ 0xB000;
А, теперь понял. Тут дело вот в чем, твоя переменная D5ON объявлена, как внешняя с атрибутом EXTERN (в этом случае она должна присутствовать в какой-нибудь библиотеке, но ведь ты ее туда не помещал, поэтому следует варнинг и, соответственно, обращение к нулевому адресу). Кроме того, EXTERN и _AT_ написаны в верхнем регистре, т.к. переопределяются где-то в заголовочных файлах. IMHO, следует поступить проще: нужно объявить D5ON вот так:

xdata volatile BYTE D5ON _at_ 0xB000; // LED address

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

xdata volatile BYTE D5ON _at_ 0xB000; // LED address

void proba(void)
{
BYTE dum;
dum = D5ON;
}

А вот соответствующий ассемблерный:

; FUNCTION proba (BEGIN)
; SOURCE LINE # 38
; SOURCE LINE # 39
; SOURCE LINE # 41
0000 90B000 MOV DPTR,#D5ON
0003 E0 MOVX A,@DPTR
0004 F500 R MOV dum,A
; SOURCE LINE # 42
0006 22 RET
; FUNCTION proba (END)


--------------------
MPEG-4 - в массы!
Go to the top of the page
 
+Quote Post
torik
сообщение Jan 31 2007, 13:09
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359



благодарю!!!

так оно все и быть. Теперь все в порядке, заработало!

Кроме того нельзя было объявление это пихать в тот же файл где екстерном прописаны регистры, иначе тоже ошибка, ведь этот ш файл подключается в нескольких местах (почти понятно сказал)
smile.gif


--------------------
Быть. torizin-liteha@yandex.ru
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 22:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01384 секунд с 7
ELECTRONIX ©2004-2016