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

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

15.01.2013, 01:39. Просмотров 23204. Ответов 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...

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

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

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

62
ShodS
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 2,011
15.01.2013, 02:08 2
http://phriokerclub.com/avr-uchebnik#void
http://lib.ru/MAN/DEMOS210/c.txt
0
Myshoit7
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 91
15.01.2013, 02:55 3
Надеюсь там довльно последовательно все расписано. А то я уже все силы потерял, от примеров кругом голова, а вот четкого понимаю где что и как до сих пор нету =\

ShodS,спасибо.

Омг, а что касательно таких команд например как PIN , использование элемента тильда ~ и << . Сдвиг влево еще понятно, а вот про тильду как инвертирование и про PIN где почитать?
0
Otikzzz
0 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 461
15.01.2013, 08:55 4
Цитата Сообщение от Myshoit7
а вот про тильду как инвертирование и про PIN где почитать?
Б. Керниган и Д. Ритчи - Язык программирования C.
0
stritsh
0 / 0 / 0
Регистрация: 28.12.2012
Сообщений: 161
15.01.2013, 09:40 5
Цитата Сообщение от Myshoit7
Подскажите где в хелпах найти описание сишных команд и примеры кода, либо литературу, по форуму темку где-то видел. Но найти не смог. Только осваиваю Си для микрокотроллеров. Помогите.
Сюда заходили?
http://chipenable.ru/ Здесь неплохие примеры программ на СИ для начинающих. Ну а по AVR в нете информации море!
http://rutroskir.org Здесь можно поживиться литературой по МК.
0
Myshoit7
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 91
27.01.2013, 05:38 6
Эммм, компилятор АВР студии пишет что пытаюсь добавить командой фалов #include <avr/iotn13a.h> больше чем один ип такого файла <avr/ioXXX.h>

#define F_CPU 1200000UL // Caaaaony ?anoioa ?aaiou

#include <avr/io.h>
#include <avr/iotn13a.h>
#include <util/delay.h>

// Eieoeaeece?oai iniiaio? ooieoe?
int main(void)
{
DDRB=0b00011000; //Iano?aeaaai ii?o B ia auoia

PORTB=0b00111011; // Eieoeaeece?oai ii?o A

while(1==1)
{
PORTB=0b0011000;
_delay_ms(50);
PORTB=0b0000000;
_delay_ms(50);

}

}
0
Otikzzz
0 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 461
27.01.2013, 09:32 7
Уберите #include <avr/iotn13a.h>. В он сам инклюдится в io.h, в зависимости от настроек проекта.
0
sirki962
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 124
28.01.2013, 09:13 8
Не буду создавать новую тему, спрошу тут.
Понадобилось мне усреднять показания с датчика (влажности, например) ибо плавают они ощутимо. Но усреднять не просто сложив несколько показаний, а придумав некоторое подобие стека.

{ //старт опроса датчика
data2 = data1;
data1 = data;
get(data);
result = (data1+data2+data)/3
}
первые пару пропусков показаний меня мало волнуют, логика работы устраивает (выкидываем последнее, прибавляем новое) плавать будет уже усредненное, но вот вопрос, это сейчас у меня усреднение по трем значениям, а надо бы на 24 значения, боюсь с таким подходом я так размажусь по памяти, что больше ничего не влезет. Да и собственно показаний - то не одно, а четыре разных будет, тут уже массив, учет знаков и вообще страшно. Может есть способ попроще?
0
BykTiho
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
28.01.2013, 10:21 9
Проще - это как раз "усреднять". Все остальное - гемор ;)
0
ShodS
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 2,011
28.01.2013, 10:25 10
Цитата Сообщение от sirki962
Но усреднять не просто сложив несколько показаний, а придумав некоторое подобие стека.
А зачем стек.... Просто выделяеш буфер на нужное количество измерений, и по кольцу (с помощю указателя) сохраняеш в него измерения, а когда надо результат, суммируеш все элементы и делиш на их количество.....

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

Цитата Сообщение от sirki962
надо бы на 24 значения, боюсь с таким подходом я так размажусь по памяти, что больше ничего не влезет. Да и собственно показаний - то не одно, а четыре разных будет, тут уже массив, учет знаков и вообще страшно.
Да вроде ничего страшного, даже если 24 измерения на 4 датчика, то всего 96 элементов, в Miko8 килобайт оперативки.... ничего страшного.
0
Bytt
0 / 0 / 0
Регистрация: 22.08.2009
Сообщений: 525
28.01.2013, 10:50 11
Цитата Сообщение от sirki962
Не буду создавать новую тему, спрошу тут.
Понадобилось мне усреднять показания с датчика (влажности, например) ибо плавают они ощутимо. Но усреднять не просто сложив несколько показаний, а придумав некоторое подобие стека.

{ //старт опроса датчика
data2 = data1;
data1 = data;
get(data);
result = (data1+data2+data)/3
}
первые пару пропусков показаний меня мало волнуют, логика работы устраивает (выкидываем последнее, прибавляем новое) плавать будет уже усредненное, но вот вопрос, это сейчас у меня усреднение по трем значениям, а надо бы на 24 значения, боюсь с таким подходом я так размажусь по памяти, что больше ничего не влезет. Да и собственно показаний - то не одно, а четыре разных будет, тут уже массив, учет знаков и вообще страшно. Может есть способ попроще?
В скользящее среднее применить? Или нет?
0
omt
0 / 0 / 0
Регистрация: 02.11.2004
Сообщений: 1,112
28.01.2013, 11:22 12
усредняешь показания трех последних замеров, хранишь значения последних 8 усреднений, потом усредняешь и их.
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
28.01.2013, 13:52 13
да, нужно определиться, нужно скользящее среднее или просто среднее. для скользящего - кольцевой буфер, иначе никак, для среднего ничего не надо, только сумматор и счетчик значений.
0
sirki962
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 124
28.01.2013, 14:10 14
Спасибо за советы, решил я выбрать кольцевой буфер все-таки. Такая мини метеостанция будет. Единственное с количеством отсчетов еще не определился до конца. Для статистики не знаю сколько памяти выбрать
0
fototysk
0 / 0 / 0
Регистрация: 05.05.2011
Сообщений: 22
31.01.2013, 15:59 15
Цитата Сообщение от Ymk
для скользящего - кольцевой буфер, иначе никак, для среднего ничего не надо, только сумматор и счетчик значений.
А можно объяснить как с помощью кольцевого буфера реализовать скользящее среднее? Как раз сейчас столкнулся с проблемой усреднения поступающих показаний датчиков. Что такое скользящее среднее знаю, что такое кольцевой буфер вроде бы знаю, но вот как на С под AVR все это дело реализуется не представляю. С программирование холодные отношения. То есть, как я понял, у нас есть массив, допустим, из 5 значений, вновь пришедшие значение записываются в первый элемент массива, а все остальное сдвигается и высчитывается среднее, или же запись ведется в последующий элемент массива и каждый раз высчитывается среднее значение в массиве?
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
31.01.2013, 16:22 16
пусть есть массив из 5 значений, нужен еще один указатель на элемент массива (индекс). и нужна переменная суммы всех элементов массива. изначально все по нулям.

когда приходит новое значение, из суммы вычитаем значение из массива, на которое указывает указатель. потом к сумме прибавляем новое значение, и кладем его (новое значение, НЕ сумму) в массив в текущую ячейку. смещаем указатель на след. элемент (с закольцовкой).

результат - переменная суммы, деленная на кол-во чисел в буфере. мгновенно практически.
0
fototysk
0 / 0 / 0
Регистрация: 05.05.2011
Сообщений: 22
31.01.2013, 17:06 17
Цитата Сообщение от Ymk
пусть есть массив из 5 значений, нужен еще один указатель на элемент массива (индекс). и нужна переменная суммы всех элементов массива. изначально все по нулям.

когда приходит новое значение, из суммы вычитаем значение из массива, на которое указывает указатель. потом к сумме прибавляем новое значение, и кладем его (новое значение, НЕ сумму) в массив в текущую ячейку. смещаем указатель на след. элемент (с закольцовкой).

результат - переменная суммы, деленная на кол-во чисел в буфере. мгновенно практически.
Код
Sum = Sum - filter[index];
Sum = Sum + new;
filter[index] = new;
index++;
if(index == 5)
{
index = 0;
}
res = Sum/5;
я правильно понял?

upd: судя по всему правильно, но... Так считается нормальным усреднять?
0
OrtimKOD
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 115
01.02.2013, 00:50 18
Лучше взять число элементов из ряда по степеням 2-ки. Тогда компилятор заменяет деление несколькими сдвигами или перестановками. Иначе деление занимает много времени/кода.
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
01.02.2013, 04:06 19
fatotysk, да, так. еще прислушайтесь к степени двойки - полезно:) там тогда и закольцовку через & можно сделать. ну и еще главное проследить за разрядностью. если, например, складываете два 16-битных числа, сумма будет 17-бит и т.д. - надо чтобы Sum вмещал максимальное число.
0
_pv
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,515
01.02.2013, 05:32 20
простой БИХ фильтр обладает практически такой же АЧХ, что и скользящее среднее по 2^N, только не требует памяти:
Код
int Filter(int x){
static int y = x << N;
y += x - (y >> N);
return y >> N;
}
0
01.02.2013, 05:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2013, 05:32

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

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

Помощь по ZF
кто может сказать в двух словах работу на ZF? может видео уроки ? смотрел...


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

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

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