Например TDA7294

Форум РадиоКот • Просмотр темы - Вопросы по С/С++ (СИ)
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 30, 2025 05:57:08

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7669 ]     ... , , , 49, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс окт 30, 2011 19:50:36 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1337
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4558
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
write_1(0, "ОК") и на экране будет ОК
Конечно будет, никто и не спорит.
Речь идёт не о Вашей ф-ии, которая выводит данные на дисплей, а о строке. Вы объявили строку как константу и пытаетесь изменить её с помощью sprintf. Но забыли о том, что она не может меняться, т.к. она константа !


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн окт 31, 2011 08:10:47 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1053
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19372
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Vlad0o писал(а):
Неужели sprintf() так много занимает?

Да, больше килобайта.

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн окт 31, 2011 11:20:37 
Открыл глаза

Зарегистрирован: Чт сен 29, 2011 13:54:53
Сообщений: 74
Рейтинг сообщения: 0
Кто это объяснит (PICC 9.6)?

Error [1346] ; 0. can't find 0x2 words for psect "config" in segment "CONFIG" (largest unused contiguous range 0x1)

_________________
Поговорим в скайпе fl.ua.aaa.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн окт 31, 2011 16:05:44 
Открыл глаза

Зарегистрирован: Вт июл 19, 2011 19:09:46
Сообщений: 67
Рейтинг сообщения: 0
Поскольку sprintf() - чет уж очень слишком большой. Я мучил гугл в поисках его альтернативы. Нашел itoa() (из int делает char*). В функция нестандартная, в обычных библиотеках Keil'a ее нет. Может у кого завалялся листинг itoa() ? Поделитесь, пожалуйста. sprintf уж очень неэкономично..

ЗЫ пробовал взять отсюда http://www.scribd.com/doc/59309455/ITOA-C , скопировалось с косяками. поправлял долго, но все равно достаточное количество ошибок.
Ругается вот так *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
на SYMBOL: cadena и SYMBOL: _itoa


Вернуться наверх
 
Открыт интернет-магазин MEAN WELL.Market – весь ассортимент MEAN WELL, выгодные цены

Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России. На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн окт 31, 2011 21:47:55 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 13
Рейтинг сообщений: 24
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Сообщений: 2029
Откуда: г. Тула
Рейтинг сообщения: 0
Ну можно сымпровизировать. Это урезанная версия: минимальный набор для чисел с десятичным основанием системы счисления. Полная версия будет немного поболее, если она вообще нужна будет.

Код:

void itoa
( int value, char * str )
{
 char * n;
 char buff;

 if (value < 0) {*(str++)='-'; value=-value;} // Если число отрицательное, то ставим минус
 n = str; // Запоминаем указатель на начало конца. O_o Числа, в смысле.
 while (value) {  *(str++) = value%10 + '0'; value /= 10; } // Преобразовываем число в строку задом на перёд
  *(str--) = 0; // Ставим нуль-символ конца строки

 while (< str) { buff = *n; *(n++) = *str; *(str--) = buff; } // Кручу-верчу перевернуть число хочу!
}
 


Естественно не исключаю и подозреваю, что сделать можно оптимальнее.

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

OS: openSUSE 13.2 (x86_64)


Вернуться наверх
 
LED-драйверы MOSO - надежные решения для индустриальных приложений

Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт ноя 01, 2011 07:16:32 
Открыл глаза

Зарегистрирован: Вт июл 19, 2011 19:09:46
Сообщений: 67
Рейтинг сообщения: 0
IfoR
Подобный вариант мне попадался. Только я что то протупил над той функцией. void itoa( int value, char * str ) здесь value это число которое надо преобразовать, а str это массив куда всё записывается.
Как мне этой функцией воспользоваться?
я предполагаю что так (для проверки):
int T;
char sT[25];
void itoa( int value, char * str );
void main (void)
{
T = 25;
itoa(T, sT);

write_1(0, sT); //вывод на ЛСД
while (1)
{}
}

Примерно так? Или все проще делается с ней?
Я просто хочу вывести на экран значения с ds1820 примерно такие -55 и 125 (без знака +)

ЗЫ У меня пока главной задачей в оптимизации стоит избавление от sprintf :)


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт ноя 01, 2011 10:03:31 
Открыл глаза

Зарегистрирован: Чт сен 29, 2011 13:54:53
Сообщений: 74
Рейтинг сообщения: 0
void LCD_WriteInt(unsigned int Data)
{
LCD_WriteChar((Data%100000)/10000+0x30);
LCD_WriteChar((Data%10000)/1000+0x30);
LCD_WriteChar((Data%1000)/100+0x30);
LCD_WriteChar((Data%100)/10+0x30);
LCD_WriteChar((Data%10)+0x30);
}

void LCD_WriteBCD(char Data)
{
LCD_WriteChar((Data&0x0F)+0x30);
}

void LCD_WriteBCDChar(char Data)
{
LCD_WriteBCD((Data&0xF0)>>4);
LCD_WriteBCD(Data&0x0F);
}

void LCD_WriteString(const char * Str)
{
while(*Str) LCD_WriteChar(*Str++);
}

void LCD_WriteVoltageInt(unsigned int Data)
{
LCD_WriteChar((Data%1000)/100+0x30);
LCD_WriteChar('.');
LCD_WriteChar((Data%100)/10+0x30);
LCD_WriteChar((Data%10)+0x30);
}

_________________
Поговорим в скайпе fl.ua.aaa.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт ноя 01, 2011 14:46:47 
Открыл глаза

Зарегистрирован: Вт июл 19, 2011 19:09:46
Сообщений: 67
Рейтинг сообщения: 0
Aerarh, спасибо. опробую сегодня.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт ноя 01, 2011 15:10:04 
Открыл глаза

Зарегистрирован: Чт сен 29, 2011 13:54:53
Сообщений: 74
Рейтинг сообщения: 0
Vlad0o писал(а):
Aerarh, спасибо. опробую сегодня.


Да те же проблемы. С флоатами. Без sprintf никак. Место еще вполне, но не работает. Че то я не так пишу.

А простячки выше работают без ошибки и почти ничего не весят.

LCD_WriteChar это ваша функция прямого вывода на LCD.

_________________
Поговорим в скайпе fl.ua.aaa.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт ноя 01, 2011 17:05:08 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 13
Рейтинг сообщений: 24
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Сообщений: 2029
Откуда: г. Тула
Рейтинг сообщения: 0
Vlad0o, ну да, как-то так.
А как тебе проще надо? Ты же не объяснил. :)

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

OS: openSUSE 13.2 (x86_64)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт ноя 01, 2011 18:22:35 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 23
Зарегистрирован: Чт апр 08, 2010 18:50:01
Сообщений: 2095
Откуда: Краснодар
Рейтинг сообщения: 0
переставил бубунту, x86 проэкты компилятся, авр-овские нет.

Код:
/usr/include/features.h|323|fatal error: bits/predefs.h: Нет такого файла или каталога|


http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=635923 пишут что это баг gcc 4.6

и хз что с этим делать. (у меня gcc версия 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)

_________________
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт ноя 01, 2011 18:40:06 
Открыл глаза

Зарегистрирован: Вт июл 19, 2011 19:09:46
Сообщений: 67
Рейтинг сообщения: 0
Aerarh, спасибо еще раз. void LCD_WriteInt(unsigned int Data) работает нормально!=) правда нули впереди появляются когда число не 5тизначное, но это можно решить добавив пару условий.

IfoR, странно. я вроде так и использовал, но экран оставался пустым. еще раз попробую, может где то что то не так скопировал я. сейчас по-быстрому проверял, как то странно вышло мне компилятор сказал что слишком много параметров, когда я вот так подставил itoa(T, sT). я все равно это itoa добью))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт ноя 01, 2011 19:58:50 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 13
Рейтинг сообщений: 24
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Сообщений: 2029
Откуда: г. Тула
Рейтинг сообщения: 0
Ко-о-о-о-од в студию!
(Пам-пам-пара-пара-пам-пам-па-па-па-па-ра-па-а-а-а-м!)

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

OS: openSUSE 13.2 (x86_64)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср ноя 02, 2011 05:35:14 
Открыл глаза

Зарегистрирован: Чт сен 29, 2011 13:54:53
Сообщений: 74
Рейтинг сообщения: 0
[quote="Vlad0o"]Aerarh, спасибо еще раз. void LCD_WriteInt(unsigned int Data) работает нормально!=) правда нули впереди появляются когда число не 5тизначное, но это можно решить добавив пару условий.

Да, по началу нагрузочка глаза разбегаются... Все в отладочном режиме, еще знак и нули... в общем мод "хоть что-то покажи, а красоту потом наведем"

_________________
Поговорим в скайпе fl.ua.aaa.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср ноя 02, 2011 13:31:48 
Открыл глаза

Зарегистрирован: Вт июл 19, 2011 19:09:46
Сообщений: 67
Рейтинг сообщения: 0
IfoR, извиняюсь. все работает :)) Я прежде чем предоставить код в студию, еще раз проверил и оказывается не зря)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт ноя 04, 2011 09:27:22 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Пн янв 07, 2008 16:56:28
Сообщений: 302
Откуда: Минск
Рейтинг сообщения: 0
пытаюсь переделать один проект "под себя" - термометр на динамике

как-то странно выводится температура на сегменты - нет постоянно горящих 4 цифр\знаков. происходит поочерёдное включение сегментов. Как победить?

while (1)
{
for (i=0;i<devices;i++)
{

#asm("cli");
znach=ds1820_temperature_10(&rom_codes[i][0])/10;
#asm("sei");
itoa((int)znach, str);
str1[0] = '+';
strcat(str, str1);
delay_ms(5);

};
};


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт ноя 04, 2011 09:47:40 
Вымогатель припоя

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Пн мар 23, 2009 04:03:45
Сообщений: 557
Рейтинг сообщения: 0
Aerarh писал(а):
Кто это объяснит (PICC 9.6)?

Error [1346] ; 0. can't find 0x2 words for psect "config" in segment "CONFIG" (largest unused contiguous range 0x1)

Вероятно Вы неправильно задали конфигурационное слово - оно у Вас больше 14 бит в размере, естественно для него не хватает места в конфиг-области памяти, которая размером 1 слово. Конфигурировать надо примерно так:
Код:
__CONFIG (LVPDIS & BORDIS & MCLREN & PWRTEN & WDTDIS & INTCLK & PROTECT);

Дефайны для макроса __CONFIG можно посмотреть в заголовочном файле на Ваш контроллер, обычно в конце. Естественно, в код должен быть включен файл htc.h


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт ноя 04, 2011 11:00:41 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1337
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4558
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
levaclaus писал(а):
Как победить?
Написать свои функции для работы с датчиком.
Подобное 100 раз обсасывалось на этом форуме.
Тем более, Вы же сами запрещаете прерывания на длительное время
Код:
#asm("cli");
.......
#asm("sei");
Это Вас не смущает ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт ноя 04, 2011 16:35:28 
Открыл глаза

Зарегистрирован: Чт сен 29, 2011 13:54:53
Сообщений: 74
Рейтинг сообщения: 0
stas00n писал(а):
Aerarh писал(а):
Кто это объяснит (PICC 9.6)?

Error [1346] ; 0. can't find 0x2 words for psect "config" in segment "CONFIG" (largest unused contiguous range 0x1)

Вероятно Вы неправильно задали конфигурационное слово - оно у Вас больше 14 бит в размере, естественно для него не хватает места в конфиг-области памяти, которая размером 1 слово. Конфигурировать надо примерно так:
Код:
__CONFIG (LVPDIS & BORDIS & MCLREN & PWRTEN & WDTDIS & INTCLK & PROTECT);

Дефайны для макроса __CONFIG можно посмотреть в заголовочном файле на Ваш контроллер, обычно в конце. Естественно, в код должен быть включен файл htc.h


Да я уже разобрался, Так и было, и дефайны нашел именно там. Спс.

_________________
Поговорим в скайпе fl.ua.aaa.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт ноя 08, 2011 11:10:52 
Открыл глаза

Зарегистрирован: Вт июл 19, 2011 19:09:46
Сообщений: 67
Рейтинг сообщения: 0
Добрый день.

Надеюсь я не исчерпал свою квоту на глупые вопросы.

У меня возникло очередное затруднение, скорее всего из специфичности самодельного девелопментборда (как оказалось этот термин больше подходит, чем "kit").

К третьему порту (Р3) по пинам (3.1, 3.2, 3.3, 3.4) подключен LCD (работает :))) ). Но! Для экономии портов на эти же пины ( 3.1 - 3.4) посадили кнопки (обычные кнопки) и с помощью контрольного пина 3.0 так сказать проверяется нажата ли кнопка или нет.
Вот так вот примерно http://i023.radikal.ru/1111/b8/80306427b39b.jpg.
Опрашивать получается - светодиод при нажатии загорается.
Вот такой вот бесконечный цикл для проверки.
Код:
while (1)
{
P3MDOUT = 0; //определение порта на вход
B1 = 0;
B2 = 1; //опрос именно этой кнопки!
B3 = 0;
B4 = 0;

if (B0 == 1) //если кнопка нажата
{Delay(1000);} //проверка на
if (B0 == 1)      //дребезг
{LED1 = 1;}
else {LED1 = 0;}
}


Но если подставить вместо "LED1 = 1;" вывод на экран произвольного текста при нажатии, то ничего хорошего не получается.... выводится только то что стоит в else (я так понимаю какой то "конфликт" - ведь один же порт используется). У меня даже в процессе экспериментов с кодом при нажатии длительном бледная буква "й" пробегала (один раз) по верхней строке справа налево (а ведь это не планировалось :)) ) и при этом на той же верхней строке более ярко был текст. К сожалению текст программы утерян..

Как мне разобраться с кнопкой? К примеру сделать счетчик нажатий кнопки. Нажимаешь - 1, еще раз - 2 на экране единицу сменяет двойка...как то так. Я понял только то что надо использовать "флаги" - глобальные переменные которые сохраняют текущее и предыдущее состояния кнопки. но пока это не дало результатов....


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7669 ]     ... , , , 49, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y