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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

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

Сообщение NStorm »

Serzh2000, атмега не "читает" ваши строчки. Их читает компилятор, который преобразует это дело в машинный код, который исполняет atmega.
Аватара пользователя
Serzh2000
Опытный кот
Сообщения: 867
Зарегистрирован: Пт фев 27, 2015 12:00:53
Откуда: Рязанская область

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

Сообщение Serzh2000 »

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

  if(second!=lastSec){                     // проверка начала новой секунды
    lastSec=second;                         // в переменную сатрой секунды устанавливаем значение новой секунды
    oldMillis = now;                          // в начале новой секунды сбрасываем в "0"
    shag = 0;                                  // в начале новой секунды сбрасываем в "0"
  }


большое спасибо ! нет ОГРОМНОЕ спасибо!!! :beer:

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

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

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

Гораздо красивей, имхо, был бы сдвиг циферек. Текущая выдвигается, следующая вдвигается. Например, сверху-вниз.
Аватара пользователя
Serzh2000
Опытный кот
Сообщения: 867
Зарегистрирован: Пт фев 27, 2015 12:00:53
Откуда: Рязанская область

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

Сообщение Serzh2000 »

я такие где то часы видел.
у меня три варианта шрифта и 8 режимов
может потом когда налюбуюсь этим режимом в другом шрифте и режиме сделаю сверху-вниз.
а пока у меня душа поет от этой отрисовки я долго над ней голову ломал, спасибо хорошему человеку
помог мне.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

Подскажите, кто в курсе: есть некая структура данных

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

volatile struct {
  int a;
  int b;
  char *buf;
  // ... чего-то там еще
} var_name;

и доступ к этой структуре может осуществляться, как из основного кода, так и из прерываний. Не пойму, достаточно ли только саму структуру объявить, как volatile или этот модификатор надо указывать и для всех полей?
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

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

Сообщение NStorm »

a5021, помечая структуру как volatile, вы делаете все её члены как volatile. Т.е. достаточно и так, если вам оно и нужно. Но учтите, что с указателями внутри так будет "засада" - т.о. будет только адрес помечен как volatile, но не данные по его адресу. Для того, чтобы пометить данные как volatile, надо указывать volatile char *buf; внутри.
Аватара пользователя
Shuspano
Грызет канифоль
Сообщения: 270
Зарегистрирован: Вс окт 20, 2019 13:03:56

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

Сообщение Shuspano »

Ну типа пытаюсь писать на "С" под AVR. Написал по инструкциям в тырнете мигалку, а транслятор выдает такое:

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

E:\Disk_D\comp\avr8-gnu-toolchain\bin>avr-gcc -mmcu=atmega48 -o blinker.a e:\bli
nker.c
In file included from e:\blinker.c:5:0:
e:\disk_d\comp\avr8-gnu-toolchain\avr\include\util\delay.h:95:3: warning: #warni
ng "Compiler optimizations disabled; functions from <util/delay.h> won't work as
 designed" [-Wcpp]
 # warning "Compiler optimizations disabled; functions from <util/delay.h> won't
 work as designed"

Результат трансляции работает как ожидалось. Тогда что это было? Чего-то пошло не так?
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

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

Сообщение NStorm »

Shuspano, добавьте ключик оптимизации при компиляции -Os и всё будет ок.
Функции _delay требуют включенную оптимизацию компилятора, чтобы правильно время рассчитывать, о чем соб-но и написано в предупреждении.
radik91
Открыл глаза
Сообщения: 51
Зарегистрирован: Сб янв 24, 2015 12:17:27
Откуда: Чувашская Республика - Чувашия

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

Сообщение radik91 »

Доброго вечера, есть плата и проект и старая программа-отладчик. Хотелось бы получать нужные дзначения для другой проги.. Проект TMS 2810
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

Можно ли как-то в Кейле компилятору сказать, чтобы отзеркаливал константные байты? Например, вместо 0xA8 получить в коде 0x15?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="Gudd-Head",url="/forum/viewtopic.php?p=3815141#p3815141"]Например, вместо 0xA8 получить в коде 0x15?[/uquote]Можно макрос написать или constexpr функцию. На iar можно rbit использовать, а вот на gcc нет. Можно ли на keil не знаю. Так что, луше стандартными средствами языка.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

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

Сообщение a5021 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3815154#p3815154"]На iar можно rbit использовать, а вот на gcc нет.[/uquote]
На всех можно. А еще можно в асм завернуть, если набор команд камня имеет этот самый rbit.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="a5021",url="/forum/viewtopic.php?p=3815196#p3815196"]На всех можно.[/uquote]gcc не умеет rbit в компайлтайме выполнять.
[uquote="a5021",url="/forum/viewtopic.php?p=3815196#p3815196"]А еще можно в асм завернуть, если набор команд камня имеет этот самый rbit.[/uquote]Речь не о рантайме.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

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

constexpr uint8_t rbit8(uint8_t x)
{
  return (x & 0x01 ? 0x80 : 0) |
         (x & 0x02 ? 0x40 : 0) |
         (x & 0x04 ? 0x20 : 0) |
         (x & 0x08 ? 0x10 : 0) |
         (x & 0x10 ? 0x08 : 0) |
         (x & 0x20 ? 0x04 : 0) |
         (x & 0x40 ? 0x02 : 0) |
         (x & 0x80 ? 0x01 : 0);
}

const uint8_t tmp = rbit8(0xA8);

int main()

  GPIOA->IDR = tmp;
}

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

//GPIOA->IDR = tmp;
        LDR.N    R1,??main_0      ;; 0x48000010
        MOVS     R0,#+21
        STR      R0,[R1, #+0]
Последний раз редактировалось VladislavS Пт мар 20, 2020 10:29:23, всего редактировалось 1 раз.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

[uquote="ARV",url="/forum/viewtopic.php?p=3815358#p3815358"]насколько я понимаю, и макросом это можно задефайнить с тем же эффектом[/uquote]
Почти 256 значений (за вычетом симметричных)? :))) :shock: :o

Идея в том, чтобы писать в коде что-то осмысленное вида

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

tmp = (3<<A)|(4<<B)|(5<<C)
и потом выплёвывать в последовательный передатчик, но проблема в том, что выдавать надо старшим битом вперёд, а передатчик умеет только младшим.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

Gudd-Head, Определись, тебе нужно константы этапа компиляции или на рантайме вычислять? Первое я написал как. Макросом будет точно так же, но хужее.

Если у тебя кортекс, судя по IDE Кеил, то у него есть команда RBIT. На рантайме всё очень просто будет

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

uint8_t tmp = _RBIT(/*любое_выражение*/)>>24;
В принципе, Keil и IAR это и в компайлтайме могут вычислить.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3815966#p3815966"]Макросом будет точно так же, но хужее.[/uquote]
Почему? Или чем хужее?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

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

Сообщение arkhnchul »

constexpr-ы обычно лаконичнее и понятнее развесистых макросов
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

[uquote="VladislavS",url="/forum/viewtopic.php?p=3815966#p3815966"]Определись, тебе нужно константы этапа компиляции или на рантайме вычислять?[/uquote]
При компиляции. И там далеко не кортекс.
Значит, использовать constexpr?
Спойлер

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

constexpr uint8_t rbit8(uint8_t x)
{
  return (x & 0x01 ? 0x80 : 0) |
         (x & 0x02 ? 0x40 : 0) |
         (x & 0x04 ? 0x20 : 0) |
         (x & 0x08 ? 0x10 : 0) |
         (x & 0x10 ? 0x08 : 0) |
         (x & 0x20 ? 0x04 : 0) |
         (x & 0x40 ? 0x02 : 0) |
         (x & 0x80 ? 0x01 : 0);}
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

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