Например TDA7294

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





Текущее время: Чт июн 26, 2025 02:24:33

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


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



Начать новую тему Ответить на тему  [ Сообщений: 7669 ]    , , , 4, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср ноя 17, 2010 20:38:40 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
«Кстати, о птичках»™
Раз уж зашёл разговор о редко используемых и малоизвестных возможностях.
И С, и С++ позволяют символьные литералы из нескольких символов. Одно требование — должно влазить в int.
Т.е. на платформе с 16-битным int позволяется запись 'AB', с 32-битным — 'ABCD'.
Размещение в памяти зависит от порядка следования байтов на заданной платформе. Самый правый символ сидит в младшем байте числа, а не по младшему байту памяти, например,
Код:
'AB' == ('A' << CHAR_BIT) | 'B';
На IBM PC программа
Код:
#include <stdio.h>
int a = 'ABCD';
int main()
{
        printf( "%4.4s\n", (char *)&a );
        return 0;
}
печатает
Код:
DCBA
Кстати, пример показывает, как правильно печатать строки известного размера без концевого 0 :-)
«точность» в спецификаторе формата вывода строки выполняет ту же роль, что и длина в strncpy()

Тут тоже есть тонкое различие между C и C++.
С: тип литералов 'A' и 'AB' — int
С++: тип литерала 'AB' — int, а вот 'A' - char.
Т.е. односимвольные литералы в C++ сменили тип с int на char, это сделано для возможности их ввода/вывода операторами >> и <<
Код:
#include <iostream>

int main()
{
        std::cout << "1-ch literal (" << 'A' << "), 2-ch literal (" << 'AB' << ")" << std::endl;
}
печатает
Код:
1-ch literal (A), 2-ch literal (16706)
Если бы для 1-символьного сохранился тип int, нельзя было бы напрямую напечатать литерал.

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт ноя 18, 2010 08:31:36 
Опытный кот
Аватар пользователя

Зарегистрирован: Вс янв 18, 2009 21:12:49
Сообщений: 703
Рейтинг сообщения: 0
avreal писал(а):
...
А что касается третьего массива — его обязан делать любой компилятор, претендующий на звание компилятора языка С.

По стандарту ANSI C89...

Ещё раз про себя убеждаюсь, век учись всё одно дураком останешься )
Подтверждаю, что "третий массив" в IAR (только С) работает.

Нашёл репродукцию второго издания от "ANSI standard for C". Параграфа приведённого вами там нет, но есть
Код:
If you do give a size, бла-бла-бла. Too many is an error, too few will just initialize the first elements of the array.
Т.е. элементы строки инициализации не влезающие в массив отбрасываются. Отбросить можно не только конец строки но и полстроки запросто )

Кстати, у K&R этот интересный момент как то не расписан.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт ноя 18, 2010 09:30:34 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт апр 07, 2009 13:39:13
Сообщений: 94
Откуда: одесса
Рейтинг сообщения: 0
Всем МЯУ ! хлопцы (может и девушки тоже) помогите разобраться. пишу меню с помощью структур. кот простой. откомпилился в CVAVR без проблем. все вроде хорошо. а на деле не работает... обидно... может поможете? код прикрепляю. но часть приведу:

struct menu
{
char Pos1[];
char Pos2[];
};
struct menu MENU_1= {"LED1", "LED2"};

struct menu *ptr=&MENU_1;

потом нада вывести на дисплей -

put_string(10,50, (*ptr).Pos1, red);
но ничего не выводится...


Вложения:
s65_8MHz.c [1.08 KiB]
Скачиваний: 596

_________________
радиоэлектроника - жизнь моя...
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт ноя 18, 2010 09:32:33 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт апр 07, 2009 13:39:13
Сообщений: 94
Откуда: одесса
Рейтинг сообщения: 0
так тож не хочет:

struct menu
{
char Pos1[];
char Pos2[];
};
struct menu MENU_1= {"LED1", "LED2"};

put_string(10,30,MENU_1.Pos1, red);

_________________
радиоэлектроника - жизнь моя...


Вернуться наверх
 
В продаже новые LED-драйверы XLC компании MEAN WELL с диммингом нового поколения

Компания MEAN WELL пополнила ассортимент своей широкой линейки светодиодных драйверов новым семейством XLC для внутреннего освещения. Главное отличие – поддержка широкого спектра проводных и беспроводных технологий диммирования. Новинки представлены в MEANWELL.market моделями с мощностями 25 Вт, 40 Вт и 60 Вт. В линейке есть модели, работающие как в режиме стабилизации тока (СС), так и в режиме стабилизации напряжения (CV) значением 12, 24 и 48 В.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт ноя 18, 2010 09:46:39 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18397
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
вообще-то так строки в структуру помещать некорректно... Pos1 и Pos2 у вас получаются массивами неопределенной длины, на сколько я в курсе, такие массивы могут помещаться в структуры только единственный раз - в самом конце, т.е. "открытый" массив должен быть последним.
вам надо объявить ваши поля простыми указателями char* и работать с ними соответственно

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт ноя 18, 2010 12:02:24 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт апр 07, 2009 13:39:13
Сообщений: 94
Откуда: одесса
Рейтинг сообщения: 0
а можно подробней. при объявлении полей как указатели char* CVAVR матюкается. наверно я чт то не так понял. и если я задам размер полей char от этого ничего вроде не изменится.... вроде

_________________
радиоэлектроника - жизнь моя...


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

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт ноя 18, 2010 12:11:29 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18397
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
а куда уж подробнее?
Код:
struct menu
{
char *Pos1;
char *Pos2;
};

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт ноя 18, 2010 12:14:32 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вт апр 07, 2009 13:39:13
Сообщений: 94
Откуда: одесса
Рейтинг сообщения: 0
ARV, спасибо большое.

_________________
радиоэлектроника - жизнь моя...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт ноя 25, 2010 03:19:54 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 10
Зарегистрирован: Пт фев 16, 2007 14:18:20
Сообщений: 1132
Откуда: Новосибирск
Рейтинг сообщения: 0
Всем привет! Нет ли ни у кого функции для динамического опроса клавиатуры? а то писать заново не охота )))
MSC-51 C8051F410.
3х3

_________________
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт дек 07, 2010 20:05:57 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Чт май 21, 2009 13:54:07
Сообщений: 335
Откуда: Москва
Рейтинг сообщения: 0
Народ такой вопрос:
Создаю функцию:
Цитата:
static void send(byte dta,LcdCmdData cd)
{
if (cd == DATA)
{
PORTD|=_BV(RS);
}
else
{
PORTD&=~(_BV(RS));
}
PORTD&=~(_BV(CS));
SPDR = dta;
while ( (SPSR & 0x80) != 0x80 );
PORTD|=_BV(CS)|_BV(RS);
}

Суть в том, что функция отправляет данные в дисплей send(данные, 0-комманда или 1-данные)
В конце её выполнения контроллер уходит в астрал!!! - не возвращается из функции и улетает за пределы кода(как-будто нет инициализации стека)
И ещё проблема при инициализации SPI, устанавливаю флаг MSTR, но мотом он сбивается - становится равным 0


Последний раз редактировалось romazan Вт дек 07, 2010 20:29:22, всего редактировалось 3 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт дек 07, 2010 20:16:37 
Друг Кота
Аватар пользователя

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт дек 07, 2010 23:34:02 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Чт май 21, 2009 13:54:07
Сообщений: 335
Откуда: Москва
Рейтинг сообщения: 0
короче разобрался что было с вылетом из функции, решилось переустановкой AvrStudio, но вот с SPI проблема, как только происходит установка бита, в следующий же цикл он вылетает.
Попробовал в настройках симулятора поставить вместо 64 меги - 8, и проблема ушла


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

Карма: 25
Рейтинг сообщений: 79
Зарегистрирован: Вт окт 05, 2010 01:08:57
Сообщений: 1800
Рейтинг сообщения: 0
Подскажите, отчего могут "портится" массивы. периодически меняется значение некоторых ячеек. Если объявить массив константой, то проблема уходит, и массивы не портятся.
я бы так и оставил, но один элемент этого массива должен изменятся в процессе работы. Да и понять охота, почему. Тем более и другие массивы сбивались, но их значение менять не нужно, и я их просто объявил как константы.

_________________
KIT


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

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19651
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Если меняться должен только один элемент, м.б. не делать его частью массива?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт дек 10, 2010 22:53:58 
Мудрый кот
Аватар пользователя

Карма: 25
Рейтинг сообщений: 79
Зарегистрирован: Вт окт 05, 2010 01:08:57
Сообщений: 1800
Рейтинг сообщения: 0
Но разве это выход..... скорее заплатка какая то.

_________________
KIT


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

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19651
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Вы же код не привели... М.б. у вас какая-нить локальная переменная, не объявленная как static :roll:

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт дек 10, 2010 23:20:58 
Мудрый кот
Аватар пользователя

Карма: 25
Рейтинг сообщений: 79
Зарегистрирован: Вт окт 05, 2010 01:08:57
Сообщений: 1800
Рейтинг сообщения: 0
глобальная. не объявленная как static.
код могу предоставить, но боюсь в 7кб чужого кривого кода все равно никто ничего не поймет.

_________________
KIT


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

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Сб авг 07, 2010 18:38:37
Сообщений: 43
Откуда: Таганрог
Рейтинг сообщения: 0
Господа помогите написать правильную маску
Есть такое выражение
Код:
Допустим
1.
0xEE&0xEE&0x0F=0x0E устраивает

но если
2.
0xED&0xEE&0x0F=0x0C

или в общем виде
B&A = С


Если c!=A то нужно чтобы результат был 0, если c=A то результат должен быть A
какую следует написать маску чтобы получить требуемый результат
IF или конструкцию типа a==c:c?0; не хочу использовать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб дек 11, 2010 13:57:30 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
T0lik писал(а):
IF или конструкцию типа a==c:c?0; не хочу использовать.
В любом случае нужно проверять биты совместно, так как если даже в каком-то одном бите несовпадение, то занулить нужно все биты. Одними инверсиями и маскированиями ~ & | ^ не отделаться.

А можно поинтересоваться, почему? Конструкция с IF будет компактнее и быстрее, так в чём причина отказа?
Код:
uint8_t foo(uint8_t c, uint8_t A)
{
        if( c != A ) c = 0;
        return c;
}

avr-gcc -Os -S
Код:
.global   foo
foo:
   cpse r24,r22 ; никаких условных переходов, всего две команды
   ldi r24,lo8(0)
   ret

arm-kgp-eabi-gcc -mcpu=cortex-m3 -mthumb -O2 -S
Код:
foo:
   cmp   r0, r1
   ite   eq
   moveq   r0, r1  ; тоже без условнх переходов, хотя эта команда и лишняя
   movne   r0, #0
   bx   lr

Даже для пентиума, у которого как бы страшны IF-ы (точнее, переходы) возможным разрушением конвейера, тут после CMP будет вкомпилрована команда CMOVNE, условного перехода не будет.

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


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

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Сб авг 07, 2010 18:38:37
Сообщений: 43
Откуда: Таганрог
Рейтинг сообщения: 0
Спасибо за отклик

Решение проблема пока нашлось ввиде
Код:
A^B


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

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


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

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


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

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


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