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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Shurf
Встал на лапы
Сообщения: 83
Зарегистрирован: Ср май 12, 2010 10:24:41
Откуда: Чувашия, Новочебоксарск
Контактная информация:

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

Сообщение Shurf »

объявление функции sprintf:

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

extern int   sprintf(char *__s, const char *__fmt, ...);

Что означают три точки? Я знаю, переменных, получаемых функцией, может быть неопределенное количество. Как в функции работать с такими переменными?
Если я хочу завернуть sprintf в другую свою функцию для вывода на экран символьного дисплея.

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

void lcd_puts(const unsigned char *string, ...) 
{
   char *buf;
        sprintf(buf, string,    (какие параметры?)   )
        char c;
   while (c=*buffer++)
   {
      HD44780_SEND_CHAR(c);
   }
}

Как написать более простую и эффективную функцию?
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

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

Сообщение md5sum »

Я использовал такой вариант:

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

void lcd_printf(const char *__fmt, ...){
   char a[50];
   va_list arg_list;
   va_start(arg_list, __fmt);
   vsnprintf(a,sizeof(a),__fmt,arg_list);
   va_end(arg_list);
   lcd_proc(a);
}

Где lcd_proc() уже моя функция выводящая на экран готовую строку.
Может гуру более правильное решение предложат?
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

вам надо копать в сторону stdarg.h

я делал что-то такое:

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

#include <stdarg.h>
/**
 * преобразование в отображаемые символы осуществляется автоматически
 * строка-формат должна находиться в памяти программ
 * @param pos - первая занимаемая позиция (от 1 до 6) слева направо
 * @param fmt - строка-формат (PROGMEM)
 * @param args - список выводимых значений
 */
void printf_P_7led(uint8_t pos, const char *fmt, ...){
   va_list args;
   va_start(args,fmt);
   vsprintf_P(ts,fmt,args);
   va_end(args);
   print_str(ts,pos);
}

опередили :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
shurikss123
Грызет канифоль
Сообщения: 271
Зарегистрирован: Пн окт 25, 2010 20:47:04
Откуда: Казахстан, Астана

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

Сообщение shurikss123 »

приветик всем
нужен совет, вернее помощь есть дисплей граф wg12864f
с его работой я разабрался теперь незнаю как занести const char sym_e в PROGMEM и потом вставить в память lcd-ки

делаю пока так тока всю память переменных занимает, а мне еще русский надо закинуть.

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

const char sym_e[][8] =
{
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//
    {0x08,0x08,0x08,0x08,0x00,0x00,0x08,0x00},//!
    {0x14,0x14,0x14,0x00,0x00,0x00,0x00,0x00},//"
    {0x14,0x14,0x3E,0x14,0x3E,0x14,0x14,0x00},//#
    {0x08,0x1E,0x28,0x1C,0x0A,0x3C,0x08,0x00},//$
    {0x30,0x32,0x04,0x08,0x10,0x26,0x06,0x00},//%
    {0x18,0x24,0x28,0x10,0x28,0x24,0x1A,0x00},//&
    {0x18,0x08,0x10,0x00,0x00,0x00,0x00,0x00},//`
    {0x04,0x08,0x10,0x10,0x10,0x08,0x04,0x00},//(
    {0x10,0x08,0x04,0x04,0x04,0x08,0x10,0x00},//)
    {0x00,0x08,0x2A,0x1C,0x2A,0x08,0x00,0x00},//*
    {0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00},//+
    {0x00,0x00,0x00,0x00,0x18,0x08,0x10,0x00},//,
    {0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x00},//-
    {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00},//.
    {0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00},///
    {0x1c,0x22,0x26,0x2a,0x32,0x22,0x1c,0x00},//0
    {0x08,0x18,0x08,0x08,0x08,0x08,0x1c,0x00},//1
    {0x1c,0x22,0x02,0x04,0x08,0x10,0x3e,0x00},//2
    {0x3e,0x04,0x08,0x04,0x02,0x22,0x1c,0x00},//3
    {0x04,0x0c,0x14,0x24,0x3e,0x04,0x04,0x00},//4
    {0x3e,0x20,0x3c,0x02,0x02,0x22,0x1c,0x00},//5
    {0x0c,0x10,0x20,0x3c,0x22,0x22,0x1c,0x00},//6
    {0x3e,0x02,0x04,0x08,0x10,0x10,0x10,0x00},//7
    {0x1c,0x22,0x22,0x1c,0x22,0x22,0x1c,0x00},//8
    {0x1c,0x22,0x22,0x1e,0x02,0x04,0x18,0x00},//9
    {0x00,0x18,0x18,0x00,0x18,0x18,0x00,0x00},//:
    {0x00,0x18,0x18,0x00,0x18,0x08,0x10,0x00},//;
    {0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x00},//<
    {0x00,0x00,0x3e,0x00,0x3e,0x00,0x00,0x00},//=
    {0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x00},//>
    {0x1C,0x22,0x02,0x04,0x08,0x00,0x08,0x00},//?
    {0x1C,0x22,0x02,0x1A,0x2A,0x2A,0x1C,0x00},//@
    {0x1C,0x22,0x22,0x22,0x3E,0x22,0x22,0x00},//A
    {0x3C,0x22,0x22,0x3C,0x22,0x22,0x3C,0x00},//B
    {0x1C,0x22,0x20,0x20,0x20,0x22,0x1C,0x00},//C
    {0x38,0x24,0x22,0x22,0x22,0x24,0x38,0x00},//D
    {0x3E,0x20,0x20,0x3C,0x20,0x20,0x3E,0x00},//E
    {0x3E,0x20,0x20,0x3C,0x20,0x20,0x20,0x00},//F
    {0x1C,0x22,0x20,0x2E,0x22,0x22,0x1C,0x00},//G
    {0x22,0x22,0x22,0x3E,0x22,0x22,0x22,0x00},//H
    {0x1C,0x08,0x08,0x08,0x08,0x08,0x1C,0x00},//I
    {0x0E,0x04,0x04,0x04,0x04,0x24,0x18,0x00},//J
    {0x22,0x24,0x28,0x30,0x28,0x24,0x22,0x00},//K
    {0x20,0x20,0x20,0x20,0x20,0x20,0x3E,0x00},//L
    {0x22,0x36,0x2A,0x2A,0x22,0x22,0x22,0x00},//M
    {0x22,0x22,0x32,0x2A,0x26,0x22,0x22,0x00},//N
    {0x1C,0x22,0x22,0x22,0x22,0x22,0x1C,0x00},//O
    {0x3C,0x22,0x22,0x22,0x3C,0x20,0x20,0x00},//P
    {0x1C,0x22,0x22,0x22,0x2A,0x24,0x1A,0x00},//Q
    {0x3C,0x22,0x22,0x3C,0x28,0x24,0x22,0x00},//R
    {0x1E,0x20,0x20,0x1C,0x02,0x02,0x3C,0x00},//S
    {0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x00},//T
    {0x22,0x22,0x22,0x22,0x22,0x22,0x1C,0x00},//U
    {0x22,0x22,0x22,0x22,0x22,0x14,0x08,0x00},//V
    {0x22,0x22,0x22,0x22,0x2A,0x2A,0x14,0x00},//W
    {0x22,0x22,0x14,0x08,0x14,0x22,0x22,0x00},//X
    {0x22,0x22,0x22,0x14,0x08,0x08,0x08,0x00},//Y
    {0x3E,0x02,0x04,0x08,0x10,0x20,0x3E,0x00},//Z
    {0x1C,0x10,0x10,0x10,0x10,0x10,0x1C,0x00},//[
    {0x22,0x14,0x3E,0x08,0x3E,0x08,0x08,0x00},//0x5c
    {0x1C,0x04,0x04,0x04,0x04,0x04,0x1C,0x00},//]
    {0x08,0x14,0x22,0x00,0x00,0x00,0x00,0x00},//^
    {0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00},//_
    {0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00},//`
    {0x00,0x00,0x1C,0x02,0x1E,0x22,0x1E,0x00},//a
    {0x20,0x20,0x2C,0x32,0x22,0x22,0x1C,0x00},//b
    {0x00,0x00,0x1E,0x20,0x20,0x20,0x1E,0x00},//c
    {0x00,0x02,0x1A,0x26,0x22,0x22,0x1E,0x00},//d
    {0x00,0x00,0x1C,0x22,0x3E,0x20,0x1C,0x00},//e
    {0x0C,0x12,0x10,0x10,0x38,0x10,0x10,0x00},//f
    {0x00,0x1C,0x22,0x22,0x1E,0x02,0x3C,0x00},//g
    {0x20,0x20,0x2C,0x32,0x22,0x22,0x22,0x00},//h
    {0x08,0x00,0x18,0x08,0x08,0x08,0x1C,0x00},//i
    {0x08,0x00,0x1C,0x04,0x04,0x24,0x18,0x00},//j
    {0x20,0x20,0x24,0x28,0x30,0x28,0x24,0x00},//k
    {0x18,0x08,0x08,0x08,0x08,0x08,0x1C,0x00},//l
    {0x00,0x00,0x34,0x2A,0x2A,0x2A,0x22,0x00},//m
    {0x00,0x00,0x2C,0x32,0x22,0x22,0x22,0x00},//n
    {0x00,0x00,0x1C,0x22,0x22,0x22,0x1C,0x00},//o
    {0x00,0x00,0x3C,0x22,0x3C,0x20,0x20,0x00},//p
    {0x00,0x00,0x1E,0x22,0x1E,0x02,0x02,0x00},//q
    {0x00,0x00,0x2C,0x32,0x20,0x20,0x20,0x00},//r
    {0x00,0x00,0x1C,0x20,0x1C,0x02,0x3C,0x00},//s
    {0x10,0x10,0x38,0x10,0x10,0x12,0x0C,0x00},//t
    {0x00,0x00,0x22,0x22,0x22,0x26,0x1A,0x00},//u
    {0x00,0x00,0x22,0x22,0x22,0x14,0x08,0x00},//v
    {0x00,0x00,0x22,0x22,0x22,0x2A,0x14,0x00},//w
    {0x00,0x00,0x22,0x14,0x08,0x14,0x22,0x00},//x
    {0x00,0x00,0x22,0x22,0x1E,0x02,0x1C,0x00},//y
    {0x00,0x00,0x3E,0x04,0x08,0x10,0x3E,0x00},//z
    {0x2E,0x2A,0x2A,0x2A,0x2E,0x00,0x00,0x00},//10
    {0x2C,0x22,0x2E,0x28,0x2E,0x00,0x00,0x00},//12
    {0x2E,0x28,0x2E,0x22,0x2C,0x00,0x00,0x00},//15
    {0x02,0x0A,0x12,0x3E,0x10,0x08,0x00,0x00},//0x7e
    {0x0E,0x1C,0x38,0x22,0x3C,0x00,0x00,0x00},//0x7f
};   

...

   int i,b;
   uint8_t ch=0x20;
   uint8_t cl=0xa0;
for(i=0;i<95;i++)
{
GLCD_DefineCharacter(ch,sym_e[i]);
++ch;
}


Спасибо за внимание!
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!
Аватара пользователя
Moto_v3x
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Ср мар 31, 2010 11:45:58
Откуда: Славянск

_e[][8]Re: Вопросы по С/С++ (СИ)

Сообщение Moto_v3x »

shurikss123

flash const char sym_e[][8]

здесь пример viewtopic.php?f=20&t=5199&start=20
Аватара пользователя
shurikss123
Грызет канифоль
Сообщения: 271
Зарегистрирован: Пн окт 25, 2010 20:47:04
Откуда: Казахстан, Астана

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

Сообщение shurikss123 »

gcc-avr нет такого
Moto_v3x писал(а):flash const char
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!
Аватара пользователя
Moto_v3x
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Ср мар 31, 2010 11:45:58
Откуда: Славянск

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

Сообщение Moto_v3x »

Аватара пользователя
shurikss123
Грызет канифоль
Сообщения: 271
Зарегистрирован: Пн окт 25, 2010 20:47:04
Откуда: Казахстан, Астана

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

Сообщение shurikss123 »

Moto_v3x писал(а):а такой метод http://microsin.ru/content/view/1070/44/

вот это уже другое дело очень умная статья! спасибо
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!
Shurf
Встал на лапы
Сообщения: 83
Зарегистрирован: Ср май 12, 2010 10:24:41
Откуда: Чувашия, Новочебоксарск
Контактная информация:

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

Сообщение Shurf »

md5sum, ARV, когда увидел итоговый размер программы, расстроился( Program: 2270 bytes (27.7% Full)) вместо прежних (Program: 778 bytes (9.5% Full)). Тьфу этот stdio.h, сами не безрукие, itoa() нам в помощь).

Но интересно было узнать про такую фишку сишника).
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

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

Сообщение md5sum »

Shurf Вопрос-же был КАК, а не А НАДО-ЛИ :)))
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

Shurf писал(а):md5sum, ARV, когда увидел итоговый размер программы, расстроился( Program: 2270 bytes (27.7% Full)) вместо прежних (Program: 778 bytes (9.5% Full)). Тьфу этот stdio.h, сами не безрукие, itoa() нам в помощь).

Но интересно было узнать про такую фишку сишника).
я бы понял ваше расстройство, если бы после компиляции вы получили Program 120% или типа того, а так - в чем проблема? или вы налог платите за каждый занятый байт? ;)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Shurf
Встал на лапы
Сообщения: 83
Зарегистрирован: Ср май 12, 2010 10:24:41
Откуда: Чувашия, Новочебоксарск
Контактная информация:

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

Сообщение Shurf »

Просто удивился, когда увидел, сколько эти библиотеки места занимают. А вам я хочу сказать спасибо :)
Shurf
Встал на лапы
Сообщения: 83
Зарегистрирован: Ср май 12, 2010 10:24:41
Откуда: Чувашия, Новочебоксарск
Контактная информация:

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

Сообщение Shurf »

При компиляции (WinAVR) выдает ошибку:

D:\Electronics\test_pojects\test18B20\default/../OWIHighLevelFunctions.c:321: undefined reference to `OWI_CheckRomCRC'

Строка кода:
if( OWI_CheckRomCRC(devices[i].id) != (OWI_CRC_OK))

Заголовочный файл, где объявлена эта функция я подключил. Чего от меня хочет компилятор?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

очевидно, объявлена она не так или не она... короче, сравните то, что есть в хидере и то, что вы написали...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Shurf
Встал на лапы
Сообщения: 83
Зарегистрирован: Ср май 12, 2010 10:24:41
Откуда: Чувашия, Новочебоксарск
Контактная информация:

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

Сообщение Shurf »

Хм.. Ошибка наиглупейшая, моя невнимательность, извиняюсь)
IRIS
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Пт сен 17, 2010 20:33:23

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

Сообщение IRIS »

Всем здравствуйте.Пытаюсь написать программу для RGB контроллера.Пишу в MPLAB с применением компилятора HI-TECH PICC. По задумке программа должна проверять статус нажатия кнопок и изменять яркость свечения светодиодов и комбинации зажжённых светодиодов,проблема в том что программа почемуто думает что кнопки всёвремя нажаты и в результате на выходе я получаю полную белеберду.Подскажите пожалуйсто что я нетак написал?Заранее спасибо.
Вложения
Led driver Proteus.rar
Проект в Протеусе
(34.12 КБ) 183 скачивания
RGB.rar
Проект в MPLAB
(31.13 КБ) 197 скачиваний
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

IRIS писал(а):Всем здравствуйте.

Что за г***но вы выкладываете? Особенно Led driver Proteus.rar ?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

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

Сообщение Roman Venom »

посоветуйте книгу по С по такому критерию: Си с нуля & основы С++ & Builder/Visual. В это трудно поверить, но решил попробовать учить С :o. За спиной уверенное знание асма, не уверенное трубы.
Успех - императив!
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

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

Сообщение Roman Venom »

чё, никто книжки не читает? :dont_know:
Успех - императив!
HeLiO
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пн дек 27, 2010 14:37:38

IAR общий вопрос

Сообщение HeLiO »

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

заранее спасибо за ответ
Ответить

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