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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
леня
Это не хвост, это антенна
Сообщения: 1399
Зарегистрирован: Пн сен 13, 2010 17:34:06
Откуда: калуга
Контактная информация:

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

Сообщение леня »

vitalik_1984 писал(а):
IfoR писал(а):Да и если мерять частоту радиально симметричных предметов, например, куллер, то могут попадаться ложные частоты, когда предмет проворачивается не целой поворот, а дробный. Тут нужно брать минимальную частоту.
Так же может попасться двойной оборот лучше посчитать количество "совпадений" при увеличении частоты оно должно быть равно количеству лопастей,а проще метку поставить маркером :)

А можно обороты и без стробоскопа померять.
Наклеечку отражающую клеишь и меряешь частоту тахометром(программным) тут есть на форуме темы.
Так можно довольно большие пределы измерения получить если еще какие нибудь делители на мелкосхемах применить.



мерить надо будет много (метка маркером)

* уже микр заказал (странная фигня в чип нн тинька стоит 65р а у меня в калуге 160р )
** так что насчёт генератора.
ВРУБАЙ !!!
И будь что будет !!!
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

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

Аlex писал(а):Видимо отвлекаете о великого мастера своими постами от величайших дел :solder:
Как вы только посмели :facepalm:

мне лучше денек в бане побыть, чем воздержаться от критики: модератор, осмелюсь вам доложить, должен следить за тем. чтобы сообщения соответствовали теме, чего вы не делаете на протяжении многих постов, не имеющих даже отдаленного отношения к теме Си или С++ - речь идет исключительно о стробоскопах каких-то и т.п. лабуде.

или могучий модератор Alex только и может, что НЕСПРАВЕДЛИВО НАКАЗЫВАТЬ, а справедливо навести порядок не в силах? не справляетесь с работой?
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

не справляетесь с работой?
А Вы свою помощь предлагаете что ли ? :)
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

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

Аlex писал(а):
не справляетесь с работой?
А Вы свою помощь предлагаете что ли ? :)
не надейтесь.
я намекаю...
битва с дураками проиграна, победители торжествуют. слава победителям!
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

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

IfoR писал(а):Ну не знал человек, что писать какой либо код за пределами функций (то что после main()) - бессмысленно, ну не знает азов Си, что такого?
после main() можно писать сколько угодно функций - это и есть азы Си. и это будет совсем не бессмысленно (точнее, не совсем бесмысленно). я, например, очень часто так делаю.
битва с дураками проиграна, победители торжествуют. слава победителям!
Mr.Denis
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

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

Сообщение Mr.Denis »

Подскажите как сделать и расчитать функцию delay?
Интересует конкретно 500 ms.
STM32F4 Discovery + KEIL + Windows 7
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

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

Сообщение IfoR »

Мастер Ломастер, нет, ну лишь бы мякнуть что нибудь. :) Про функции и комментарии после main() я ничего не говорил, а говорил я про то, что у спрашивающего в коде.

2Mr.Denis:

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

#include <util/delay.h>

...

_delay_ms(500);

...
 
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Mr.Denis
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

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

Сообщение Mr.Denis »

Спасибо за ответ!
У меня компилятор IAR ARM, и я там не нашел эту функцию.
Видимо надо писать сомаму при помощи цикла for.
Но есть проблема, я ни как не пойму как расчитать.
STM32F4 Discovery + KEIL + Windows 7
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

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

Сообщение ut1wpr »

Mr.Denis писал(а):Спасибо за ответ!
У меня компилятор IAR ARM, и я там не нашел эту функцию.
Видимо надо писать сомаму при помощи цикла for.
Но есть проблема, я ни как не пойму как расчитать.

В IAR нет подобной функции. При компиляции нигде не указывается тактовая частота примененного МК.
Можно сделать так:
1. Определить период тактовой частоты. К примеру для тактовой 8 МГц период будет 0.125 мксек.
2. Посчитаем, сколько тактов займет время в 1 мсек. 1000 мксек / 0.125 мксек = 8000.
3. Пишете функцию:

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

void delay_one_ms(void){
 __delay_cycles(8000);
}
Базируясь на одной из intrinsic фукций библиотеки IAR.

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

__delay_cycles __delay_cycles(unsigned long int);

Цитирую из доки на компилятор IAR:
Makes the compiler generate code that takes the given amount of cycles to perform, that
is it inserts a time delay that lasts the specified number of cycles.
Note: The specified value must be a constant integer expression and not an expression
that is evaluated at runtime.

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

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

void delay_ms(unsigned int delay){
 while( delay--) delay_one_ms():
}
Для повышения точности вводите поправки на время вызова и возврата, уменьшая количество циклов при вызове базовой задержки.
Немножко повозившись можно добиться приемлимой точности.
Которая тут же развалится, введи вы в программу прерывания и их обработчики.
Как вывод - точные задержки без применения таймеров - фикция.
Да и простои МК на время задержки - не лучший способ убить время. Есть другие способы.
Разберитесь, что вам надо.
С уважением,
Виктор.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Mr.Denis писал(а):Видимо надо писать сомаму при помощи цикла for.

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

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

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

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

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

Сообщение IfoR »

Ну а я не это. Не думаю, что компилятор будет в восторге от оператора while в околофункциональном пространстве.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

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

Сообщение ut1wpr »

vitalik_1984 писал(а):
Mr.Denis писал(а):Видимо надо писать сомаму при помощи цикла for.

зачем писать самому? скачать просто библиотеку для вин авр.delay.h там посмотреть как реализовано(лишнее выкинуть) и пользоваться
как обычно библиотеками
И что вы советуете? У человека IAR, а вы ему библиотеку от WinAVR? Да еще так авторитетно...
Я же отметил - "в IAR при компиляции не используется тактовая частота процессора". И как прикажете применять библиотеку задержек WinAVR,
которая на этом параметре базируется?
В таком случае от нее только заголовки функций останутся, если лишнее выбросить... :)
С уважением,
Виктор.
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

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

Сообщение IfoR »

ut1wpr писал(а):И как прикажете применять библиотеку задержек WinAVR,
которая на этом параметре базируется?


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

#define F_CPU 8000000  

В начале кода.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

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

IfoR писал(а):

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

#define F_CPU 8000000   

В начале кода.

боюсь, не прокатит это... задержки в WinAVR реализованы довольно специфично, с использованием ассемблерных вставок и т.п. - всего этого IAR не поймет.
битва с дураками проиграна, победители торжествуют. слава победителям!
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

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

Сообщение ut1wpr »

IfoR писал(а):
ut1wpr писал(а):И как прикажете применять библиотеку задержек WinAVR,
которая на этом параметре базируется?


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

#define F_CPU 8000000   

В начале кода.
Так просто? :)
Вы пробовали? У вас работает? В IAR?
Позвольте усомниться в вашем совете.
С уважением,
Виктор.
Next13
Родился
Сообщения: 19
Зарегистрирован: Чт фев 18, 2010 21:07:54

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

Сообщение Next13 »

Подскажите как на Си максимально компактно выполнить следующую задачку: Есть три 2-е байтные переменные, в которых записано одно значение. Допустим в одной переменной ошибка, как ее исправить? P/s голова уже кипит и место в мк почти "0" осталось :(
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

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

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

Сообщение vitalik_1984 »

Мастер Ломастер писал(а):боюсь, не прокатит это... задержки в WinAVR реализованы довольно специфично, с использованием ассемблерных вставок и т.п. - всего этого IAR не поймет.
Ну вот же разберем пример

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

void
_delay_loop_1
(uint8_t __count)
{
    __asm__ volatile (          
        
"1: dec %0" "\n\t" 
        
"brne 1b"
        : "=r" (__count)
        : "0" (__count)
    );
}
 
Меняем на что нибудь вроде

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

void _delay_loop_1(char __count){
char i=0;
while (__count)i=__count--;
 
Попробовать можно.
Но лучше конечно через таймеры паузы делать.
В поисках истины человек развивается.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Аlex писал(а):Что значит "исправить" ? И как понять "ошибка" ?

Насколько я понял, что-то вроде мажоритарной логики "2 из 3-х", и третью переменную сделать как первые две.
Но тут надо уточнить, что надо на выходе, если все 3 (6) байт разные.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

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