Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение vitalik_1984 »

нафига кекс?нужно просто скомпилировать и в файле .lss будет нужные команды с метками и командами си
В поисках истины человек развивается.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Вопросы по С/С++ (СИ)

Сообщение Jack_A »

vitalik_1984 писал(а):нафига кекс?нужно просто скомпилировать и в файле .lss будет нужные команды с метками и командами си

Когда есть под рукой компилятор - тады да. А если нету ? Разгребать чужой хекс ( или свой полузабытый ) - занятие на любителя, но иногда нет другого выхода. Как говорил Лаврентий Палыч -- архивы утеряны :(

Мастер Ломастер писал(а): после того, как над исходником Си поработает оптимизатор компилятора, даже включив соображалку в режиме турбо порой сложно увидеть соответствие ассемблерных команд с Сишными операторами :)))


Не стану спорить, на Сях под МК не пис`ал никогда, но таково общее соображение. В данном частном случае как преодолею свою лень, попобую свой совет на практике, чтоб, как говорил В.С.В. - "я себе уже все доказал".
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение vitalik_1984 »

проще и быстрее достать компилятор тем более официальный бесплатен,чем мудрить разбираться.
А судя по сообщению автора у него еще и исходник есть.можно вовсе только нужный кусок скомпилировать- проще искать будет.
В поисках истины человек развивается.
Аватара пользователя
Bigcrash
Открыл глаза
Сообщения: 61
Зарегистрирован: Вс фев 12, 2012 09:32:37

Re: Вопросы по С/С++ (СИ)

Сообщение Bigcrash »

Ну развели, дай только повод =). Хотя бы словесный алгоритм, просто нипайму как команда с данными пересылается, пару строчек ассемблерного кода.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Вопросы по С/С++ (СИ)

Сообщение Jack_A »

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 раз.
Аватара пользователя
Bigcrash
Открыл глаза
Сообщения: 61
Зарегистрирован: Вс фев 12, 2012 09:32:37

Re: Вопросы по С/С++ (СИ)

Сообщение Bigcrash »

Jack_A писал(а):И цель этого форума, я думаю - не накормить готовыми решениями, а хоть чуть-чуть научить соображат

Вот поэтому я и прошу кусок только одной функции, а не всего проекта....
Я его дизасемблировал, но там черт ногу сломит. Без комментариев иди разбери.....
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Вопросы по С/С++ (СИ)

Сообщение Jack_A »

Как работает I2C - статеек и на русском -- море. Старик Гуголь в курсе ...

Посмотрел даташит - так этот интерфейс еще проще, чем I2C. Смотрим времянку - и реализуем ее парой десятков команд.
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

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. Типо декларация конфликтует. Что не так? Может где-нибудь опять что-то просмотрел?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

Это не деклорация конфликтует, а прототипа этой ф-ии няма :)
Её ж нужно объявить, ф-ию то эту... :write:
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение IfoR »

Либо переместить функцию WriteChar выше Set, либо, опять же, выше функции Set написать её прототип:

Код: Выделить всё

void WriteChar(unsigned char); 
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
SfS
Друг Кота
Сообщения: 19337
Зарегистрирован: Пт янв 12, 2007 11:21:39
Откуда: Томск

Re: Вопросы по С/С++ (СИ)

Сообщение SfS »

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: Вопросы по С/С++ (СИ)

Сообщение BCluster »

все верно, добавлю только что прототипы лучше сувать в .h файл )
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Re: Вопросы по С/С++ (СИ)

Сообщение Pika4u »

Спасибо всем, проблема уже решена, просто объявил прототипы всех функций в самом начале. :))
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Мастер Ломастер »

SfS писал(а):В языке С (да и в почти любом другом) - прежде, чем что-то использовать - это что-то надо описать.
SfS писал(а):Прототип - эта такая штука, которая говорит "вот гдето есть такая функция, которая описывается так то и так то, а описание её гдето в другом месте".
SfS писал(а):Аналогично можно описывать прототипы переменных, объявленных где-то позже или в другом файле, ключевым словом extern.
позволю себе чуть-чуть скорректировать сказанное, т.к. усматриваю некоторую путаницу в понятиях и терминологии.

для любого объекта в программе на Си характерны 3 этапа существования:
1. описание (прототипирование)
2. определение (реализация)
3. использование.

это верно для всех элементов программы: переменных, констант, типов и функций.
не для каждого элемента обязательно наличие всех трех этапов, чаще всего может быть опущен этап 1 и/или 3.
если этапы присутствуют, то в программе они должны располагаться именно в указанном порядке. причем принцип такой: до тех пор, пока не дошло дело до очередного этапа, все предыдущие этапы как бы и не существуют, т.е. если вы описали функцию, но не сделали ее реализацию и не стали ее использовать - компилятору чихать на описание. и так для всех компонентов программы.

в некоторых случаях этапы могут быть объединены в одну конструкцию. например, очень часто при описании переменных используется присваивание им начального значения: в этом случае мы имеем в одной строке реализацию 1 и 2 этапов.
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

можна ли так записать команду ????

Код: Выделить всё

while (k=0){PORTC=101; PORTD=110};
Tell Me The Truth
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

Можно.
Но зачем в порты постоянно долбить одно и то-же ?
Скажите что Вы хотите сделать. Возможно найдутся более правильные решения.
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение IfoR »

FreshMan, такой цикл никогда не выполнится.
Здесь в условии происходит запись в k нуля, что с результате возвращает 0. А цикл while работает только если в условии результат не ноль.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Вопросы по С/С++ (СИ)

Сообщение МитяРа »

Аlex писал(а):зачем в порты постоянно долбить одно и то-же ?
А это, как в анекдоте: Набирать неправильный пароль до тех пор, пока система не согласится.. :))
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

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

Код: Выделить всё

while()
{
......;
......;
.......;
}

мне стало интересно можна ли ее записать так ???

Код: Выделить всё

while (k=1){PORTC=101; PORTD=11110};
Tell Me The Truth
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение IfoR »

Для справки, препроцессор, перед проходом компилятора, убирает из кода все лишние пробелы, табуляции и переводы строк, ну и комментарии. Так что хоть как расставляй команды - ему всё равно.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Ответить

Вернуться в «Разные вопросы по МК»