Страница 12 из 20

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Пн мар 17, 2014 17:32:46
Слесарь
Очень красивые платки!
Я подумаю что может быть.

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Вс мар 23, 2014 22:42:03
CyberVad
Добрый день! Загвоздка. Нужно из шести чисел (unsigned char) собрать одно число - от 0 до 999999. Прямо в лоб умножая каждое число на весовой коэффициент не получается (из 1 2 3 0 0 0 получаем 123000, а из 456000 получаем не 456000 а 384464). Результирующее число unsigned long
Вот как я пробую: F=dig[1]*100000+dig[2]*10000+dig[3]*1000+dig[4]*100+dig[5]*10+dig[6];
Пробовал и так (первые 3 цифры) - F=(unsigned long)dig[1]*100000+(unsigned long)dig[2]*10000+(unsigned long)dig[3]*1000; результат тот же
Как бы правильнее?

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Ср мар 26, 2014 10:52:52
devprodest
Даю наводку на мысль
http://stackoverflow.com/questions/6687 ... -long-in-c

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

#include<stdio.h>

long ConvertCharToLong(char *pSrc) {
    int i=1;
    long result = (int)pSrc[0] - '0';
    while(i<strlen(pSrc)){
         result = result * 10 + ((int)pSrc[i] - '0');
         ++i;
    }
    return result;
}


int main() {
    char* str = "34878";
    printf("The answer is %d",ConvertCharToLong(str));
    return 0;
}
Надеюсь правильно распорядитесь.

Ну а вообще не очень хорошо использовать подобные названия типов данных лучшемы переопределить и назвать:

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

typedef signed char int8_t ;
typedef unsigned char uint8_t ;

typedef signed short int16_t;
typedef unsigned short uint16_t;

typedef signed long int32_t;
typedef unsigned long uint32_t;
Сразу видно что из себя представляет переменная, о то хрен пойми как она выглядит в конкретно рассматриваемой архитектуре.

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Ср мар 26, 2014 13:08:20
Siarzhuk
CyberVad писал(а): Вот как я пробую: F=dig[1]*100000+dig[2]*10000+dig[3]*1000+dig[4]*100+dig[5]*10+dig[6];
А вы с индексами не напутали? dig[6] для массива из шести элементов содержит малорелевантный мусор. Правда это не объясняет отсутствие ошибки для случая 123000. С другой стороны и 123000 и 456000 умещаются в 3 байта - соответственно 0x1 E0 78 и 0x6 F5 40 и до знакового бита обоим далеко - сложно сказать по одной строчке. ;-)

Если ещё актуально попробуйте такой вариант:

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

	unsigned char dig[6] = { 4, 5, 6, 0, 0, 0 };
	unsigned long acc = 0;
	for (int i = 0; i < sizeof(dig) / sizeof(dig[0]); i++) {
		acc += dig[i];
		acc *= 10;
	}

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Ср мар 26, 2014 22:13:44
CyberVad
Всем спасибо! Да, с индексами немного напутал, но это не важно: я в начале объявлял массив из 7ми элементов. Потом передумал и стал использовать только 6 из них. Странно, что я использовал и в присваивании и в сборке числа индексы начиная с 1.
Изначальная казалось бы наглядная формула так и не заработала. Возможно это глюк компилятора. Если нагородить такую конструкцию:
unsigned int temp;
F=dig[1]*10+dig[2];
F=F*10000;
temp=dig[3];
temp=temp*1000;
F=F+temp;
temp=dig[4];
temp=temp*100;
F=F+temp;
temp=dig[5]*10+dig[6];
F=F+temp;
То есть последовательно вычислять, то всё работает.
Но с вашей, дорогие товарищи, подачи я очень изящно сделал циклом вот так и всё прекрасно заработало:
F = dig[0];
for (unsigned char i=1; i<6; i++) F=F*10+(dig);
Всем большое спасибо!

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Ср июн 11, 2014 13:40:09
znoxx
Вот собственно мой вариант "радио".
http://znoxx.me/2014/05/nas-radio.html

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Ср июн 11, 2014 19:08:22
CyberVad
Не совсем хардкор, но зато работает )) У меня наоборот - только хардкор, только МК, но не совсем работает )) Не могу победить такую загвоздку: если в двух словах, то вызывая одну и ту-же процедуру, одним и тем-же образом из разных процедур - получаем разный результат. Если кто-то силён в СИ отпишитесь в личку...

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Чт июн 12, 2014 00:01:44
znoxx
CyberVad писал(а):если в двух словах, то вызывая одну и ту-же процедуру, одним и тем-же образом из разных процедур - получаем разный результат.
Значит судя по симптомам
1) если идет опрос каких-то аналоговых ножек - проверяйте питание. Совет дурацкий - знаю. Но я на это напоролся мощно.
2) но вообще, это похоже на то, что идёт какое-то переполнение памяти.
Лечить следующим образом - ставим компилятор (если работаете под windows - msys или cygwin gcc). Правда, в нашем случае сойдет и Visual Studio.
Выдираем сомнительную процедуру и вставляем в отдельный исходник и тестируем с отладчиком.
Т.е. тупо пишем на обычном компьютере (не для МК) и смотрим, что происоходит в отладчике.
Если всё нормально (мы, фактически, проводим делаем тесты) - грешим на переполнение.
Лечить так - по возможности не делаем так:
for(unsigned char i=0;i<100;i++)
а делаем так

unsigned char i=0; - вне процедуры

my_procedure()
{
for (i=0;i<100;i++)
{
код
код
код
}
}

далее - если юзаются константы, как-то

my_procedure()
{
char myData[]="something to read";
}

нужно опять-таки перетащить в глобальную секцию и сделать
const PROGMEM char myData[]="бла бла бла"
Это перетащит константы во флеш и освободит драгоценную память.

Как-то так.

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Чт июн 12, 2014 17:53:33
boingo-00
Почему Коты не делают Интернет радиоприемники?
Потому_что_это_будут_не_радиолюбители.Слушал_я_инет_радио...Говен.Особенно_с_инетом_1кб/с.ИМХО,интереснее_обычное_радио.

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Чт июн 12, 2014 18:29:51
CyberVad
Не во всех населённых пунктах в радиоэфире принимаются желаемые радиостанции. Кроме того не всё желаемое можно принять в радиоэфире

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Чт июн 12, 2014 20:51:48
boingo-00
Это да. И то было мое мнение.

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Пт июн 13, 2014 15:19:21
murkot
возвращаясь к началу темы: очень даже делают :-) сделал два вывода для себя: если надо для себя, дешево, быстро и вкусно, - тупо взять TP-Link MR3020 и поставить на него OpenWRT. в USB-порт (хост) воткнуть USB-звуковуху и наслаждаться любимыми станциями. писать там кода никакого не надо, максимум - пакеты поставить из репозитория. если хочется пописАть код, можно подключить ethernet phy к stm32f4-discovery, а в нее - уже воткнуть наушники. в обоих случаях цена решения менее $30. минус - управление только через веб-морду в обоих случаях.

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Пт июн 13, 2014 15:23:05
znoxx
murkot писал(а):минус - управление только через веб-морду в обоих случаях.
Ну почему же только через вебморду =)
Кстати на MR3020 мало флеша свободного =)

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Пт июн 13, 2014 20:24:21
abc
Флеш на MR3020 достаточно легко можно увеличить до 8 или до 16 МБ.
Предварительно из "родного" чипа сливается дамп, переписываются последние 64кБ (если не вру) в новую микруху, потом меняется сам чип. Если надо более подробно - поищу ссылку.

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Пт июн 13, 2014 22:03:02
znoxx
znoxx писал(а):Если надо более подробно - поищу ссылку.
Было бы здорово. Там как раз засада - какие-то запчасти для корректной работы wifi в этих 64к
И я где-то читал, что народ не сильно преуспел - хотя может быть я ошибаюсь.

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Пт июн 13, 2014 22:26:04
Слесарь
abc писал(а):Флеш на MR3020 достаточно легко можно увеличить до 8 или до 16 МБ.
В моих приемника 32 КБ для обработчика TCP/IP и 32 КБ аудиобуфер на несколько секунд, соответственно мои приемники быстрее, так как работать с малым объемом памяти можно значительно быстрей. Практически нет такого понятия как загрузка после включения, если отклик интернет-станций достаточно быстрый, радио начинает воспроизводить через 1 секунду после включения.

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Пт июн 13, 2014 22:42:56
abc
Слесарь, я абсолютно не спорю - специально обученный приемник всяко лучше любого девайса с линуксом на борту.
Но, тем не менее, многие пользователи не настолько преуспели в программировании микроконтроллеров, а "коробочного" решения не было и нет - Вы же сами писали, что пришлось довольно сильно допиливать исходники от Микрочипа.

znoxx
http://cyber-place.ru/showthread.php?t=387 где-то с третьей страницы

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Сб июн 14, 2014 06:52:35
Слесарь
abc писал(а):Слесарь, я абсолютно не спорю - специально обученный приемник всяко лучше любого девайса с линуксом на борту.
Но, тем не менее, многие пользователи не настолько преуспели в программировании микроконтроллеров, а "коробочного" решения не было и нет - Вы же сами писали, что пришлось довольно сильно допиливать исходники от Микрочипа.
Да. И это самое интересное!
Но надо признать, что Микрочип задал хороший тон своим TCP/IP стеком и самым компактным примером интернет-радио. Теперь я могу встроить интернет-радио во что только заблагорассудится, с любым интерфейсом управления.

В продолжение темы хочу еще попробовать беспроводной вариант интернет-радио. Дома установить мощный адаптер LAN -> RF 430 МГц, с выносной антенной и большим ДБи. А в руках иметь RF 430 MHz носимое интернет-радио с антенной резинкой. Предполагаю, такое радио будет работать в радиусе до 10 км. А если делать автомобильный вариант, то в радиусе до 50 км.

Но а для тех у кого есть бесплатный интернет сотового оператора конечно же лучше состыковать МК + аппаратный декодер MP3 + GSM 3G радиомодуль.

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Пт июн 20, 2014 22:51:09
CyberVad
Товарищи программисты! MPLAB и PICC18.
Подскажите такой пустячок: как массиву присвоить строковое значение?
Массив определяется так:
typedef struct
{
BYTE vRecordValid;
BYTE vStationName[31];
BYTE vStationURL[160];
BYTE vRecordDeleted[64];
} NVSTATION_RECORD;
Далее
#pragma udata STATION_SECTION
volatile NVSTATION_RECORD Station;
#pragma udata
Вот хочу сделать что-то вроде Station.vStationName = "SuperРадио!"
Конечно же так нельзя, а как можно?

Вариант проще.
Массив, допустим, unsigned char name[31];
Вопрос то-же - как одним махом ему присвоить значение строковое, например "Радио"?

Re: Почему Коты не делают Интернет радиоприемники?

Добавлено: Пт июн 20, 2014 23:31:44
Слесарь
Помнится, перед тем как что-либо писать на C и C++, я два года вчитывался в книгу "Бьерн Страуструп Язык C++". Вам же рекомендую пройти простой курс с простым названием "Первые шаги".

Конкретно по вашему вопросу, рекомендую освоить стандартные функции работы с памятью, в разделе справки по компилятору Memory and String Manipulation Functions