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

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

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

Сообщение ARV »

dm211 писал(а):Ну на табло у меня минус показывает sprintf
так это у вас формат в sprintf ЗНАКОВЫЙ, небось, %d - угадал? напишите %u и будет без минуса :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="dm211",url="/forum/viewtopic.php?p=3309469#p3309469"]А я хочу, чтобы ниже нуля был ноль, тогда вопрос-что делать?[/uquote]
Сначала проверяй на 0, потом минусуй, а не наоборот.
dm211
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вс дек 10, 2006 19:26:13

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

Сообщение dm211 »

[uquote="ARV",url="/forum/viewtopic.php?p=3309473#p3309473"]
dm211 писал(а):Ну на табло у меня минус показывает sprintf
так это у вас формат в sprintf ЗНАКОВЫЙ, небось, %d - угадал? напишите %u и будет без минуса :)))[/uquote]
самодельный sprintf, но это где то там, с %u не уходит на минус, а на большое число..

Добавлено after 1 hour 8 minutes 25 seconds:
[uquote="Reflector",url="/forum/viewtopic.php?p=3309476#p3309476"]Сначала проверяй на 0, потом минусуй, а не наоборот.[/uquote]

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

if(x!=0) x--; 

Помогло,спасибо.
Век живи-век учись.
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

Доброго времени суток. Что возвращает данное выражение ?

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

return (UART_RxHead != UART_RxTail);
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7357
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

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

Сообщение uldemir »

0 - если выражение ложно, не 0 - если истинно (обычно 1)
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

Спасибо.
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

Что делает следующая строка ?

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

uint8_t segments = digit < 10 ? _digit2segments[digit] : 0x00;

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

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

Сообщение ARV »

Пока_без_кота писал(а):Что делает следующая строка ?
в переменную segments помещается значение _digit2segments[digit], если digit меньше 10, а если больше, то в segments помещается 0.
Пока_без_кота писал(а):какое ключевое слово гуглить, чтобы научиться понимать такие строки ?
тернарный оператор ? (это сам оператор, а не вопрос в конце предложения)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

Благодарю !!!
Аватара пользователя
levaclaus
Потрогал лапой паяльник
Сообщения: 302
Зарегистрирован: Пн янв 07, 2008 16:56:28
Откуда: Минск

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

Сообщение levaclaus »

Подскажите, в rx_buffer[] сливаются ответы от uart, известны все возможные слова и их расположение в этом буфере.
Как теперь красивее и практичнее воспользоваться условием if ?

К примеру в
rx_buffer[0] = 'I';
rx_buffer[1] = 'V';

if ((rx_buffer[0] == 'I')&&(rx_buffer[1] == 'V')) {
doit();
};

Но как быть если нужно проверить строку из 16 символов?
Последний раз редактировалось levaclaus Вс фев 25, 2018 08:28:53, всего редактировалось 1 раз.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

levaclaus писал(а):Но как быть если нужно проверить строку из 16 символов?
strncmp
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ROMan2947
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

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

Сообщение ROMan2947 »

Приветствую! в файле main объявил структуру, по прерыванию передаю адрес этой структуры в функцию в include-файл для работы с ее членами. компилятор плюется. Как можно решить эту проблему?

Спойлер

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


///////////////////////////////////////
struct struct_1 {
     
         uint8_t a;
    uint8_t b;
    uint8_t c;
 }A;

ISR (INT0_vect)
{
function(&A);
}

int main(void)
{
}
//////////////////////////////////////////

//////////////////
include - file////
/////////////////

void function(struct struct_1 *A)
{

A->a+=1;
A->b+=1;
A->c+=1;

}

Последний раз редактировалось ROMan2947 Пн фев 26, 2018 19:51:20, всего редактировалось 1 раз.
viiv
Грызет канифоль
Сообщения: 285
Зарегистрирован: Чт ноя 06, 2014 13:09:06

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

Сообщение viiv »

[uquote="ROMan2947",url="/forum/viewtopic.php?p=3317650#p3317650"]компилятор плюется. Как можно решить эту проблему?[/uquote]

Как ругается компилятор? Он ведь Вам говорит, что ему не нравится.
Попробую свои телепатические возможности

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

struct struct

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

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

Сообщение ARV »

вы инклюдите исходник, т.е. файл с расширением *.c? если так, то это плохая практика.
надо инклюдить только *.h файлы, в которых, кстати, не должно быть никакой реализации функций.

надо так:

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

// заголовочный файл main.h
#if !defined(__MAIN_H__)
#define __MAIN_H__
#include <stdint.h>
typedef struct{
   uint8_t a;
   uint8_t b;
   uint8_t c;
} my_struct;
#endif

// файл main.c
#include "main.h"
#include "next.c"
static my struct A;

ISR(INT0_vect){
   function(&A);
}

// файл next.h
#if !defined(__NEXT_H__)
#define __NEXT_H__
#include "main.h"
void function(my_struct *s);
#endif

// файл next.c
#include "next.h"

void function(my_struct *s){
   s->a++;
   s->b--;
   s->c = s->a + s->b;
}
кстати, вызывать функции из других модулей в обработчике прерываний - тоже так себе идея...
Последний раз редактировалось ARV Пн фев 26, 2018 19:53:28, всего редактировалось 1 раз.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ROMan2947
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

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

Сообщение ROMan2947 »

Зачем два раза? Имя структуры не может совпадать ключевым словом (struct - ключевое слово)


исправил

Добавлено after 3 minutes 40 seconds:
вы инклюдите исходник, т.е. файл с расширением *.c? если так, то это плохая практика.


в maine я подключаю файл с расширением .h туда и передаю структуру для работы, в этом файле у меня функция function.

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

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

Сообщение ARV »

ROMan2947 писал(а):файл с расширением .h туда и передаю структуру для работы, в этом файле у меня функция function
не делайте так
ROMan2947 писал(а):чем это чревато?
ничем страшным, кроме достаточно долгого вызова обработчика прерываний и расхода памяти на стек. в принципе, можно забить.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ROMan2947
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

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

Сообщение ROMan2947 »

не делайте так


у меня уже несколько библиотек написанных подобным образом,что удивительно, что они работают без нарекания...я бы дальше так и думал,что все так и должно быть...но мне одно не понятно почему они работают когда в *h. файлах должно быть только описание,а там у меня куча функции с текстом, которые и принимаю и возвращают данные, хоть и внешние....а со структурами не прокатило?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Они работают "без нарекания" до тех пор, пока этот .h файл включается в коде только один раз.

Стоит только включить такой .h файл в два разных .c файла, и начнёте долго и упорно разгребать ошибки компоновки.

А по поводу приведённого кода тоже включу телепатию и предположу, что ругается компилятор на вызов в прерывании неизвестной (ранее не объявленной) функции.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Попробуйте объявить тип структуры через typedef, чтобы без всяких

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

struct struct_1 *
было.
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

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

Сообщение arkhnchul »

вы упорно не хотите написать, как именно вам ругается компилятор. Считаете это неважным? Рискну предположить, что в его ругани все описано достаточно исчерпывающе.

подсказка: откуда вдруг в объявлении функции будет известен тип struct_1?
Ответить

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