Вопросы по С/С++ (СИ)
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
нафига кекс?нужно просто скомпилировать и в файле .lss будет нужные команды с метками и командами си
В поисках истины человек развивается.
Re: Вопросы по С/С++ (СИ)
vitalik_1984 писал(а):нафига кекс?нужно просто скомпилировать и в файле .lss будет нужные команды с метками и командами си
Когда есть под рукой компилятор - тады да. А если нету ? Разгребать чужой хекс ( или свой полузабытый ) - занятие на любителя, но иногда нет другого выхода. Как говорил Лаврентий Палыч -- архивы утеряны
Мастер Ломастер писал(а): после того, как над исходником Си поработает оптимизатор компилятора, даже включив соображалку в режиме турбо порой сложно увидеть соответствие ассемблерных команд с Сишными операторами
Не стану спорить, на Сях под МК не пис`ал никогда, но таково общее соображение. В данном частном случае как преодолею свою лень, попобую свой совет на практике, чтоб, как говорил В.С.В. - "я себе уже все доказал".
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
проще и быстрее достать компилятор тем более официальный бесплатен,чем мудрить разбираться.
А судя по сообщению автора у него еще и исходник есть.можно вовсе только нужный кусок скомпилировать- проще искать будет.
А судя по сообщению автора у него еще и исходник есть.можно вовсе только нужный кусок скомпилировать- проще искать будет.
В поисках истины человек развивается.
Re: Вопросы по С/С++ (СИ)
Ну развели, дай только повод =). Хотя бы словесный алгоритм, просто нипайму как команда с данными пересылается, пару строчек ассемблерного кода.
Re: Вопросы по С/С++ (СИ)
Bigcrash писал(а):Ну развели, дай только повод =). Хотя бы словесный алгоритм, просто нипайму как команда с данными пересылается, пару строчек ассемблерного кода.
Ну нам готовенькое подавай. Если дизасемблить -- не по плечу и комайлер скачать, как vitalik советует, лень, то надо открыть даташит на таймер, и все там подробно расписано.
А перевести эти простейшие инсрукции в ASM даже мой Мурзик - с легкостью.
----------
PORT_RTC |= (1<<SCLK);//устанавливаем синхроимпульс и по фронту бит записывается в часы
=>
IN tmp,PORT_RTC
ORI tmp,(1<<SCLK)
OUT PORT_RTC, tmp
----------
PORT_RTC &= ~(1<<IO);//сбрасываем IO и SCLK
PORT_RTC &= ~(1<<SCLK);
=>
IN tmp,PORT_RTC
ANDI tmp,~(1<<IO)
OUT PORT_RTC, tmp
; тут можно короткую задержку
IN tmp,PORT_RTC
ANDI tmp,~(1<<SCLK)
OUT PORT_RTC, tmp
и так дале, в таком конспекте
И цель этого форума, я думаю - не накормить готовыми решениями, а хоть чуть-чуть научить соображать.
Последний раз редактировалось Jack_A Вт фев 14, 2012 15:54:43, всего редактировалось 1 раз.
Re: Вопросы по С/С++ (СИ)
Jack_A писал(а):И цель этого форума, я думаю - не накормить готовыми решениями, а хоть чуть-чуть научить соображат
Вот поэтому я и прошу кусок только одной функции, а не всего проекта....
Я его дизасемблировал, но там черт ногу сломит. Без комментариев иди разбери.....
Re: Вопросы по С/С++ (СИ)
Как работает I2C - статеек и на русском -- море. Старик Гуголь в курсе ...
Посмотрел даташит - так этот интерфейс еще проще, чем I2C. Смотрим времянку - и реализуем ее парой десятков команд.
Посмотрел даташит - так этот интерфейс еще проще, чем I2C. Смотрим времянку - и реализуем ее парой десятков команд.
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Вопросы по С/С++ (СИ)
Уже 20 минут ломаю голову:
Компилятор ругается на WriteChar в функции Set. Типо декларация конфликтует. Что не так? Может где-нибудь опять что-то просмотрел?
Код: Выделить всё
void Set(unsigned char com)
{
WriteChar(com);
}
void WriteChar(unsigned char data)//функция вывода
{
PORTB=data;//в Порт В кидаем то, что загрузили
E=1;//Передергиваем затвор(строб)
delay_us(2);//Ждем 2 мксек, чтобы контроллер дисплея очухался
E=0;//Стреляем!!(выводим)
delay_us(40);//Ждем 40 мксек, чтобы контроллер дисплея отдохнул
} Компилятор ругается на WriteChar в функции Set. Типо декларация конфликтует. Что не так? Может где-нибудь опять что-то просмотрел?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Это не деклорация конфликтует, а прототипа этой ф-ии няма 
Её ж нужно объявить, ф-ию то эту...
Её ж нужно объявить, ф-ию то эту...

- IfoR
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Сб ноя 15, 2008 10:09:56
- Откуда: г. Тула
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Либо переместить функцию WriteChar выше Set, либо, опять же, выше функции Set написать её прототип:
Код: Выделить всё
void WriteChar(unsigned char); Re: Вопросы по С/С++ (СИ)
Pika4u писал(а):Уже 20 минут ломаю голову:Код: Выделить всё
void Set(unsigned char com)
{
WriteChar(com);
}
void WriteChar(unsigned char data)//функция вывода
{
PORTB=data;//в Порт В кидаем то, что загрузили
E=1;//Передергиваем затвор(строб)
delay_us(2);//Ждем 2 мксек, чтобы контроллер дисплея очухался
E=0;//Стреляем!!(выводим)
delay_us(40);//Ждем 40 мксек, чтобы контроллер дисплея отдохнул
}
Компилятор ругается на WriteChar в функции Set. Типо декларация конфликтует. Что не так? Может где-нибудь опять что-то просмотрел?
В языке С (да и в почти любом другом) - прежде, чем что-то использовать - это что-то надо описать.
У тебя ф-ция WriteChar() сначала вызывается, а потом описывается. Это неправильно.
Компилятор работает так же как ты читаешь книжки - слева направо, сверху вниз.
И компилятору надо знать, что такое "WriteChar". Какие параметры в ней передаются и что возвращается.
Если написать так:
Код: Выделить всё
void WriteChar(unsigned char data)//функция вывода
{
PORTB=data;//в Порт В кидаем то, что загрузили
E=1;//Передергиваем затвор(строб)
delay_us(2);//Ждем 2 мксек, чтобы контроллер дисплея очухался
E=0;//Стреляем!!(выводим)
delay_us(40);//Ждем 40 мксек, чтобы контроллер дисплея отдохнул
}
void Set(unsigned char com)
{
WriteChar(com);
}
то ругаться, скорее всего не будет (если других ошибок нет).
Ещё можно сделать так: объявить прототип функции, потом вызов и потом описать функцию, см ниже:
[quote="Pika4u"]Уже 20 минут ломаю голову:
Код: Выделить всё
void WriteChar(unsigned char data); // Прототип функции вывода
void Set(unsigned char com)
{
WriteChar(com);
}
void WriteChar(unsigned char data)//функция вывода
{
PORTB=data;//в Порт В кидаем то, что загрузили
E=1;//Передергиваем затвор(строб)
delay_us(2);//Ждем 2 мксек, чтобы контроллер дисплея очухался
E=0;//Стреляем!!(выводим)
delay_us(40);//Ждем 40 мксек, чтобы контроллер дисплея отдохнул
} Прототип - эта такая штука, которая говорит "вот гдето есть такая функция, которая описывается так то и так то, а описание её гдето в другом месте".
Аналогично можно описывать прототипы переменных, объявленных где-то позже или в другом файле, ключевым словом extern.
Код: Выделить всё
extern int a; // Прототип переменной (где-то имеется переменная a).
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
все верно, добавлю только что прототипы лучше сувать в .h файл )
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Вопросы по С/С++ (СИ)
Спасибо всем, проблема уже решена, просто объявил прототипы всех функций в самом начале. 
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
SfS писал(а):В языке С (да и в почти любом другом) - прежде, чем что-то использовать - это что-то надо описать.
SfS писал(а):Прототип - эта такая штука, которая говорит "вот гдето есть такая функция, которая описывается так то и так то, а описание её гдето в другом месте".
позволю себе чуть-чуть скорректировать сказанное, т.к. усматриваю некоторую путаницу в понятиях и терминологии.SfS писал(а):Аналогично можно описывать прототипы переменных, объявленных где-то позже или в другом файле, ключевым словом extern.
для любого объекта в программе на Си характерны 3 этапа существования:
1. описание (прототипирование)
2. определение (реализация)
3. использование.
это верно для всех элементов программы: переменных, констант, типов и функций.
не для каждого элемента обязательно наличие всех трех этапов, чаще всего может быть опущен этап 1 и/или 3.
если этапы присутствуют, то в программе они должны располагаться именно в указанном порядке. причем принцип такой: до тех пор, пока не дошло дело до очередного этапа, все предыдущие этапы как бы и не существуют, т.е. если вы описали функцию, но не сделали ее реализацию и не стали ее использовать - компилятору чихать на описание. и так для всех компонентов программы.
в некоторых случаях этапы могут быть объединены в одну конструкцию. например, очень часто при описании переменных используется присваивание им начального значения: в этом случае мы имеем в одной строке реализацию 1 и 2 этапов.
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: Вопросы по С/С++ (СИ)
можна ли так записать команду ????
Код: Выделить всё
while (k=0){PORTC=101; PORTD=110};Tell Me The Truth
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Можно.
Но зачем в порты постоянно долбить одно и то-же ?
Скажите что Вы хотите сделать. Возможно найдутся более правильные решения.
Но зачем в порты постоянно долбить одно и то-же ?
Скажите что Вы хотите сделать. Возможно найдутся более правильные решения.
- IfoR
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Сб ноя 15, 2008 10:09:56
- Откуда: г. Тула
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
FreshMan, такой цикл никогда не выполнится.
Здесь в условии происходит запись в k нуля, что с результате возвращает 0. А цикл while работает только если в условии результат не ноль.
Здесь в условии происходит запись в k нуля, что с результате возвращает 0. А цикл while работает только если в условии результат не ноль.
Re: Вопросы по С/С++ (СИ)
А это, как в анекдоте: Набирать неправильный пароль до тех пор, пока система не согласится..Аlex писал(а):зачем в порты постоянно долбить одно и то-же ?
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Re: Вопросы по С/С++ (СИ)
меня интересует правильность команды в плане синтаксиса................., я видил стандартную запись
мне стало интересно можна ли ее записать так ???
Код: Выделить всё
while()
{
......;
......;
.......;
}мне стало интересно можна ли ее записать так ???
Код: Выделить всё
while (k=1){PORTC=101; PORTD=11110};Tell Me The Truth
- IfoR
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Сб ноя 15, 2008 10:09:56
- Откуда: г. Тула
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Для справки, препроцессор, перед проходом компилятора, убирает из кода все лишние пробелы, табуляции и переводы строк, ну и комментарии. Так что хоть как расставляй команды - ему всё равно.
