Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.76/128: Рейтинг темы: голосов - 128, средняя оценка - 4.76
Myshoit7
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 91
1

Помощь в языке Си

15.01.2013, 01:39. Просмотров 23280. Ответов 62
Метки нет (Все метки)

Подскажите где в хелпах найти описание сишных команд и примеры кода, либо литературу, по форуму темку где-то видел. Но найти не смог. Только осваиваю Си для микрокотроллеров. Помогите.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2013, 01:39
Ответы с готовыми решениями:

Помощь в самом языке
Объясните пожалуйста как писать на с++ программы.Всмысле какие нужно писать библиотеки,как написать...

как этот код на языке с++ будет выглядить на языке php?
#include <iostream> using namespace std; const int LEN = 80; class instrument{ private: ...

Конвертер для перевода программ на языке PHP в текст программы на языке Assembler
Всем привет. Как можно реализовать такую задачу? Разработать конвертор в языке Assembler для...

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

Создать шуточную программу, которая при вводе имени на русском языке выдаст, как оно звучит на японском языке
Такая задача была сегодня на программировании. Создать шуточную программу, которая при вводе имени...

62
fototysk
0 / 0 / 0
Регистрация: 05.05.2011
Сообщений: 22
01.02.2013, 20:42 21
Цитата Сообщение от Ymk
fatotysk, да, так. еще прислушайтесь к степени двойки - полезно:) там тогда и закольцовку через & можно сделать. ну и еще главное проследить за разрядностью. если, например, складываете два 16-битных числа, сумма будет 17-бит и т.д. - надо чтобы Sum вмещал максимальное число.
Да, спасибо большое, к степени двойки уже прислушался и исправил
Цитата Сообщение от _pv
простой КИХ фильтр обладает практически такой же АЧХ, что и скользящее среднее по 2^N, только не требует памяти:
Код:
...

Вот в коде не понял, для чего в этой строке: y += (x - y) >> N; стоит y если он при каждом входе в функцию объявляется как 0. Объясните плиз.
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
01.02.2013, 22:16 22
y там static, поэтому его значение будет только первый раз 0, а дальше оно будет сохраняться между вызовами (это как глобальная переменная, которая видна только в этой функции).
0
Myshoit7
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 91
02.02.2013, 03:07 23
Как установить отдельный бит порта в 1 или 0?
0
S_Otix
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 537
02.02.2013, 03:22 24
Код
PORTB |= (1<<6); //Установка 6 бита порта B
6b0:   2e 9a          sbi   0x05, 6   ; 5
PORTB &= ~(1<<6); //Сброс 6 бита порта B
6b2:   2e 98          cbi   0x05, 6   ; 5
0
02.02.2013, 03:22
Myshoit7
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 91
02.02.2013, 03:40 25
Благодарствую, тоолько я туплю, обьясните работу это команды, операторы я знаю, но немного не доганяю как они в этой комане работают. Скажем не понимаю такой момент: разве все остальные биты не затираются оператором "<<", ">>". Мне ведь необходимо поменять 1 отдельный бит в регистре не затрагивая остальных.
0
OrtimKOD
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 115
02.02.2013, 03:52 26
PORTB=PORTB | (1<<6) ;
Так понятнее?
0
Myshoit7
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 91
02.02.2013, 15:28 27
Пасиба, дошло
Еще вопросик, вот тут такое выражение:

TCCR1B = (1 << CS12)|(0 << CS11)|(1 << CS10); //выбор коэффициента предделителя clk/1024

Так вот зачем тут "|". Или
0
tromzystor
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 178
02.02.2013, 19:19 28
Цитата Сообщение от Myshoit7
Благодарствую, тоолько я туплю, обьясните работу это команды, операторы я знаю, но немного не доганяю как они в этой комане работают. Скажем не понимаю такой момент: разве все остальные биты не затираются оператором "<<", ">>". Мне ведь необходимо поменять 1 отдельный бит в регистре не затрагивая остальных.
Возможно, более понятней будет такая запись:
PORTB=PORTB | (1<<6).
Дословно расшифровывается: порту В присвоить результат наложения маски (1<<6) на текущее состояние порта.
Т.е. на текущее состояние порта 0bxxxxxxxx накладываем маску 0b01000000, в итоге получаем 0bx1xxxxxx. Всё, бит 6 установлен! Сброс аналогично.

Уже написали...

Про установку для таймера - та же "кухня" с масками.
0
Myshoit7
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 91
02.02.2013, 23:47 29
Цитата Сообщение от tromzystor
Цитата Сообщение от Myshoit7
Благодарствую, тоолько я туплю, обьясните работу это команды, операторы я знаю, но немного не доганяю как они в этой комане работают. Скажем не понимаю такой момент: разве все остальные биты не затираются оператором "<<", ">>". Мне ведь необходимо поменять 1 отдельный бит в регистре не затрагивая остальных.
Возможно, более понятней будет такая запись:
PORTB=PORTB | (1<<6).
Дословно расшифровывается: порту В присвоить результат наложения маски (1<<6) на текущее состояние порта.
Т.е. на текущее состояние порта 0bxxxxxxxx накладываем маску 0b01000000, в итоге получаем 0bx1xxxxxx. Всё, бит 6 установлен! Сброс аналогично.

Уже написали...

Про установку для таймера - та же "кухня" с масками.

Большое СПАСИБО!

Только касательно "|", почему не запятая. Просто мне вот так нужно поянсить, как вы сделали. Тугой я на понимание кода =\
0
OrtimKOD
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 115
03.02.2013, 00:10 30
Цитата Сообщение от Myshoit7
Еще вопросик, вот тут такое выражение:

TCCR1B = (1 << CS12)|(0 << CS11)|(1 << CS10); //выбор коэффициента предделителя clk/1024

Так вот зачем тут "|". Или
Побитовое ИЛИ 3-х масок. По сути означает конкретно эта запись, что в TCCR1B записывается число в котором биты CS12 и CS10 установлены в 1. В части (0 << CS11) - это ничего не делает(сколько раз 0 не сдвигай он нулем и останется) и просто оставлено для наглядности.
0
OrtimKOD
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 115
03.02.2013, 00:19 31
Цитата Сообщение от Myshoit7
Только касательно "|", почему не запятая. Просто мне вот так нужно поянсить, как вы сделали. Тугой я на понимание кода =\
У как все запущено....
Почитайте-ка сперва вообще что такое битовые операции и с чем их едят http://ru.wikipedia.org/wiki/%D0%91%...86%D0%B8%D0%B8. Что касается ответа на вопрос почему "ИЛИ" это палочка, а не запятая - так исторически для Си сложилось что эту операцию означают именно так...
0
Myshoit7
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 91
03.02.2013, 03:31 32
Цитата Сообщение от OrtimKOD
Цитата Сообщение от Myshoit7
Только касательно "|", почему не запятая. Просто мне вот так нужно поянсить, как вы сделали. Тугой я на понимание кода =\
У как все запущено....
Почитайте-ка сперва вообще что такое битовые операции и с чем их едят http://ru.wikipedia.org/wiki/%D0%91%...86%D0%B8%D0%B8. Что касается ответа на вопрос почему "ИЛИ" это палочка, а не запятая - так исторически для Си сложилось что эту операцию означают именно так...

Эммм, это как раз таки я знаю, все знакомо, но просто перечисление устанавливаемых битов через операцию или я просто тупо не догоняю.
0
OrtimKOD
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 115
03.02.2013, 04:52 33
Дык там нет никаких операций. CS10,CS11 ... это константы равные номеру бита. Сдвиг константы это так-же константа. Логическая операция над константами - константа. В сухом остатке результат всех тех операций это просто число(константа) у которого установлены нужные биты. И это число уже дается "в зубы" компилятору что-бы он создал для требуемого процессора код для присвоения некой ячейке этого числа.
0
stritsh
0 / 0 / 0
Регистрация: 28.12.2012
Сообщений: 161
03.02.2013, 09:47 34
Цитата Сообщение от Myshoit7
Эммм, это как раз таки я знаю, все знакомо, но просто перечисление устанавливаемых битов через операцию или я просто тупо не догоняю.
Почитайте про битовые операции здесь http://chipenable.ru/index.php/progr...edeleniya.html
0
Drumyo
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 57
03.02.2013, 23:47 35
Раз уж тут помогают разбираться в Си, то скажите кто что думает по такому вопросу.

В учебниках по С пишут, что область видимости локальных нестатических переменных ограничивается размерами блока, где она объявляется. К тому же первые стандарты языка обязуют объявлять переменную до начала исполняемого кода. Представим, что у нас есть некая функция, посреди которой ни с того ни с сего фигурными скобками открывается блок, в нем объявляется переменная, внутри блока она как-то используется и блок закрывается. Вот как-то так:
Код
int*main*(void)
{
Init();
//*...
{
int*i;
for*(i=0;*i<N;*i++)
{
//*...
}
}
//*...
}
Вопрос: освобождается ли после выхода из блока память, занимаемая такой временной переменной? Может ли она потом использоваться, скажем, mallocом? Насколько корректно применение такой конструкции на практике?
0
OrtimKOD
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 115
04.02.2013, 00:02 36
Переменная не статическая поэтому куда и как использует ее компилятор - на его усмотрение. Оптимизатор ее вообще может оставить в пределах регистрового файла не трогая оперативки. Такие переменные компилятор объявляет по мере необходимости и освобождает ее место как только она становится не нужна. Причем от синтаксиса программы это не зависит - только от нужности.
ЗЫ, Оптимизатор вообще шутник тот еще - он может выкидывать из кода целые куски программы если он посчитает, что выкидывание такого куска ничего не изменит.
0
Sym
0 / 0 / 0
Регистрация: 16.12.2016
Сообщений: 1
04.02.2013, 00:14 37
Цитата Сообщение от Myshoit7
Пасиба, дошло
Еще вопросик, вот тут такое выражение:

TCCR1B = (1 << CS12)|(0 << CS11)|(1 << CS10); //выбор коэффициента предделителя clk/1024

Так вот зачем тут "|". Или
Странное выражение

почему не
TCCR1B |= (1 << CS12)|(0 << CS11)|(1 << CS10);

или так вот

TCCR1B = TCCR1B | (1 << CS12)|(0 << CS11)|(1 << CS10);

Очень громоздкие конструкции. Надо бы написать функцию и пользоваться, типа

Код
SetByt(TCCR1B,CS12);
SetByt(TCCR1B,CS10);
ClrByt(TCCR1B,CS11);
Помоему намного нагляднее.
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
04.02.2013, 00:44 38
Цитата Сообщение от Drumyo
Вопрос: освобождается ли после выхода из блока память, занимаемая такой временной переменной? Может ли она потом использоваться, скажем, mallocом? Насколько корректно применение такой конструкции на практике?
1. она освобождается, хотя бы формально (что может намутить компилятор - выше уже сказали, может ничего реально не делать). но вот если это си++ и переменная имеет деструктор - он будет вызываться при выходе из блока.
2. про маллок не понятно. обычно лок. переменные и куча, из которой выделяет маллок - не связаны.
3. определение переменной около места использование - нормально, если компилятор позволяет.
0
Kymo
0 / 0 / 0
Регистрация: 01.04.2012
Сообщений: 319
04.02.2013, 00:59 39
Цитата Сообщение от sym
Странное выражение

почему не
TCCR1B |= (1 << CS12)|(0 << CS11)|(1 << CS10);
или так вот
TCCR1B = TCCR1B | (1 << CS12)|(0 << CS11)|(1 << CS10);
Ну это же очевидно. В Вашем случае добавятся эти биты в TCCR1B независимо от остальных, а в случае ТС, где просто =, то остальные биты будут в нулях.

Цитата Сообщение от sym
Очень громоздкие конструкции. Надо бы написать функцию и пользоваться, типа

SetByt(TCCR1B,CS12);
SetByt(TCCR1B,CS10);
ClrByt(TCCR1B,CS11);
Помоему намного нагляднее.
А это компилятор может разложить на отдельные команды, в случае через "или" это будет одно число. Если флеша много, то да, можно не заморачиваться.
0
Myshoit7
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 91
04.02.2013, 02:27 40
Все, до всего допер) ВСе оч просто, тупо нужно делать операции по порядку))) ахахах, ну я и лошара) Спасиба. Дальше еще тут буду оставлять вопросы)
0
04.02.2013, 02:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2013, 02:27

На русском языке или языке программирования
Опишите на русском языке или на одном из языков программирования алгоритм получения из...

В чем разница между "Порядок выполнения программ на языке C" и "Структура программы на языке C"
в конспектах у себя не нашел, хоть и записывал все, что объяснял преподаватель. вот, собственно,...

1с Помощь
Проблема такая.. Открываю журнал-ордер счета по субконтам, а затем пытаюсь сохранить как таблицу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru