Вопросы по С/С++ (СИ)
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="ARV",url="/forum/viewtopic.php?p=4157599#p4157599"]наверное, "параноидальный" режим проверки ошибок/варнингов включен...[/uquote]Нет, это просто компилятор в режиме С++, который более строго к типам относится. Посмотрите моё сообщение выше. Я без всяких компиляторов сразу приведение типа использовал.
- Реклама
[uquote="Martian",url="/forum/viewtopic.php?p=4155711#p4155711"]И это не избавит от мусора, так как strcpy сделает первый элемент пробелом и во второй элемент занесет ноль - признак конца строки. Логичнее тогда уж присвоить 0, и именно 0, не "0". Это и будет пустая строка. А в этом случае не нужна strcpy.
Но вообще, зная адрес массива и его размер, заполнить эту область чем-то можно кучей способов, например, memset. Наверное, надо конкретно по мк/компилятору смотреть, что будет оптимальней.[/uquote]
сработало
спасибо !
Но вообще, зная адрес массива и его размер, заполнить эту область чем-то можно кучей способов, например, memset. Наверное, надо конкретно по мк/компилятору смотреть, что будет оптимальней.[/uquote]
сработало
спасибо !
Tell Me The Truth
- Сообщения: 923
- Зарегистрирован: Пн сен 10, 2018 19:16:28
jcxz, uint32_t *ptr = 0x40020000; // объявляем указатель
*ptr = 1024; // по адресу указателя пишем новое значение.
Проверил в CubeIDE, компилируется и работает в железе.
*ptr = 1024; // по адресу указателя пишем новое значение.
Проверил в CubeIDE, компилируется и работает в железе.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Martian, зачем вы переворачиваете с ног на голову? Правильно с volatile и любыми ключами оптимизатора, а не наоборот.
- Реклама
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Martian",url="/forum/viewtopic.php?p=4157969#p4157969"]Затем, что никто не объясняет механизма.[/uquote]Я же показал что будет без volatile. Как ещё объяснить? На форуме только и делаю, что пингвинов поднимаю (с) М.Задорнов
[uquote="Martian",url="/forum/viewtopic.php?p=4157969#p4157969"]Правильно так, как надо в отдельно взятом случае,[/uquote]Делать надо хорошо, плохо само получится.
[uquote="Martian",url="/forum/viewtopic.php?p=4157969#p4157969"]в противном случае оптимизатор был неотключаем вообще и тотально,[/uquote]И это правильно. Имеет смысл один раз выставить оптимизацию на максимум (по размеру или скорости). Правильно написанная программа должна работать с любыми ключами оптимизации.
[uquote="Martian",url="/forum/viewtopic.php?p=4157969#p4157969"]и всюду бездумно пихалось бы volatile.[/uquote]С дуру и хрен сломать можно. А конкретно тут volatile нужен обязательно.
[uquote="Martian",url="/forum/viewtopic.php?p=4157969#p4157969"]Правильно так, как надо в отдельно взятом случае,[/uquote]Делать надо хорошо, плохо само получится.
[uquote="Martian",url="/forum/viewtopic.php?p=4157969#p4157969"]в противном случае оптимизатор был неотключаем вообще и тотально,[/uquote]И это правильно. Имеет смысл один раз выставить оптимизацию на максимум (по размеру или скорости). Правильно написанная программа должна работать с любыми ключами оптимизации.
[uquote="Martian",url="/forum/viewtopic.php?p=4157969#p4157969"]и всюду бездумно пихалось бы volatile.[/uquote]С дуру и хрен сломать можно. А конкретно тут volatile нужен обязательно.
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Martian",url="/forum/viewtopic.php?p=4158125#p4158125"]VladislavS, скажите мне, почему надо делать чтение из регистра волатильным? Что именно плохого, если нет?[/uquote]

https://godbolt.org/z/WsdqExKWM [uquote="Martian",url="/forum/viewtopic.php?p=4158125#p4158125"]И, кстати, на ноль делить можно.[/uquote]Вам да, я разрешаю.
https://godbolt.org/z/WsdqExKWM [uquote="Martian",url="/forum/viewtopic.php?p=4158125#p4158125"]И, кстати, на ноль делить можно.[/uquote]Вам да, я разрешаю.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Martian",url="/forum/viewtopic.php?p=4158140#p4158140"]На мой вопрос Вы не ответили, к сожалению.[/uquote]Вы не видите разницы между тем что делает foo1() и foo2(), отличающиеся одним словом volatile? Тогда о чём вообще можно говорить....
регистр, как правило, связан с аппаратурой, .е. его значение может измениться в любой момент, т.е. даже между двумя подряд идущими считываниями. компилятор об этом знать не может, поэтому может посчитать, что вместо двух подряд идущих считываний можно сделать одно и использовать результат дважды, т.е. он как бы может закэшировать считанные данные и второй раз к регистру уже не обращаться. volatile обязывает его всякий раз, когда встречается имя этой переменной, осуществлять реальный физический доступ к соответствующей области памяти. даже в таком случае:Martian писал(а):почему надо делать чтение из регистра волатильным? Что именно плохого, если нет?
Код: Выделить всё
volatile uint32_t *reg = 123456;
*reg;если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
ARV, если посмотреть на foo1() с моей картинки, то видно, что он может вообще ни одного чтения не сделать. Он как бы говорит: "Мальчик, ты дурак? Возьми конфетку (true) и иди отсюда."
это другой крайний случай: компилятор имеет право не делать то, что по его мнению не имеет смысла. например, пустой цикл.
Код: Выделить всё
for(i=0; i<100;i++); // может не делать
for(volatile int i=0; i<100;i++); // не может не делатьесли рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Благодаря вам всем мне стало более понятно, для чего нужен volatile и когда его применять.
- Сообщения: 1856
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="linkov1959",url="/forum/viewtopic.php?p=4157907#p4157907"]jcxz, uint32_t *ptr = 0x40020000; // объявляем указатель
*ptr = 1024; // по адресу указателя пишем новое значение.
Проверил в CubeIDE, компилируется и работает в железе.[/uquote]И что?
Вы увидели, что в данном конкретном компиляторе с данными конкретными ключами оптимизации - работает. И что?
Не понятно, что хотели этим сказать.....
Добавлено after 4 minutes 5 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=4157983#p4157983"]Правильно написанная программа должна работать с любыми ключами оптимизации.[/uquote]+++
Добавлено after 3 minutes 59 seconds:
[uquote="Martian",url="/forum/viewtopic.php?p=4158068#p4158068"]Прекрасно неволатильно читаю из регистров без косяков. Всяких, описуемых и нет.[/uquote]Попробуйте немного оторваться от клавиатуры, включить голову и подумать почему именно так происходит. И почему происходит как в примере VladislavS.
Вроде как всё должно быть само собой понятным.
Добавлено after 3 minutes 33 seconds:
[uquote="Martian",url="/forum/viewtopic.php?p=4158125#p4158125"]скажите мне, почему надо делать чтение из регистра волатильным? Что именно плохого, если нет?[/uquote]Надо делать (обязательно) его таким, только если важен сам факт чтения. Если же важно только прочитанное значение - не надо (не обязательно).
Опять-же советую подумать над этим. Т.е. - задействовать голову, а не пальцы на клавиатуре.
*ptr = 1024; // по адресу указателя пишем новое значение.
Проверил в CubeIDE, компилируется и работает в железе.[/uquote]И что?
Вы увидели, что в данном конкретном компиляторе с данными конкретными ключами оптимизации - работает. И что?
Не понятно, что хотели этим сказать.....
Добавлено after 4 minutes 5 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=4157983#p4157983"]Правильно написанная программа должна работать с любыми ключами оптимизации.[/uquote]+++
Добавлено after 3 minutes 59 seconds:
[uquote="Martian",url="/forum/viewtopic.php?p=4158068#p4158068"]Прекрасно неволатильно читаю из регистров без косяков. Всяких, описуемых и нет.[/uquote]Попробуйте немного оторваться от клавиатуры, включить голову и подумать почему именно так происходит. И почему происходит как в примере VladislavS.
Вроде как всё должно быть само собой понятным.
Добавлено after 3 minutes 33 seconds:
[uquote="Martian",url="/forum/viewtopic.php?p=4158125#p4158125"]скажите мне, почему надо делать чтение из регистра волатильным? Что именно плохого, если нет?[/uquote]Надо делать (обязательно) его таким, только если важен сам факт чтения. Если же важно только прочитанное значение - не надо (не обязательно).
Опять-же советую подумать над этим. Т.е. - задействовать голову, а не пальцы на клавиатуре.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Martian",url="/forum/viewtopic.php?p=4158389#p4158389"]Может, тогда Вы мне ответите, зачем тогда куча уровней оптимизации?[/uquote]Чтобы хоть какую-то отладку поиметь. После оптимизации O3 с LTO результирующий код имеет невысокую связь с исходным.
[uquote="Martian",url="/forum/viewtopic.php?p=4158389#p4158389"]Показать бы такое мнение чувакам из Микрочипа, которые вечно оговаривают условие успешной компиляции и работоспособности...[/uquote]Никогда не видел подобного. Но если это правда, то им бы с компилятором поработать надо. А пока, бежать оттуда куда глаза глядят.
[uquote="Martian",url="/forum/viewtopic.php?p=4158389#p4158389"]Показать бы такое мнение чувакам из Микрочипа, которые вечно оговаривают условие успешной компиляции и работоспособности...[/uquote]Никогда не видел подобного. Но если это правда, то им бы с компилятором поработать надо. А пока, бежать оттуда куда глаза глядят.
Добрый вечер. Переписал все библиотеки для дисплейчика SSD1306 128х64 с ардуиновского на чистый С++. Дело конечно кропотное. Прошел весь тест. Всё работает. Приобрел некоторый практический опыт программирования (классы, темплеты ну и пр.) Вопрос у меня скорее организационный - архив 3.3M не загружается (там и модель в Протеусе) Как быть господа коты?
- Вложения
-
- IMG_0500.JPG
- (84.67 КБ) 123 скачивания
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
[uquote="Эйлер Леонард",url="/forum/viewtopic.php?p=4161967#p4161967"]архив 3.3M не загружается[/uquote]
Для таких вещей есть сосфорж, гитхаб, битбакет, гитлаб и т.д., и т.п.
Для таких вещей есть сосфорж, гитхаб, битбакет, гитлаб и т.д., и т.п.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
Добрый вечер.
Экспериментально установил, что если;
#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))
компилятор выдает;
Program Memory Usage : 16374 bytes 50,0 % Full
а если;
inline static bool MIN( auto a, auto b ){ return (((a)<(b))?(a):(b)); }
inline static bool MAX( auto a, auto b ){ return (((a)>(b))?(a):(b)); }
то;
Program Memory Usage : 15016 bytes 45,8 % Full
Говорил в миру один - "макросы зло!"
Экспериментально установил, что если;
#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))
компилятор выдает;
Program Memory Usage : 16374 bytes 50,0 % Full
а если;
inline static bool MIN( auto a, auto b ){ return (((a)<(b))?(a):(b)); }
inline static bool MAX( auto a, auto b ){ return (((a)>(b))?(a):(b)); }
то;
Program Memory Usage : 15016 bytes 45,8 % Full
Говорил в миру один - "макросы зло!"
Наверняка, не заинлайнилось и вызывается как обычная функия. Поэтому код медленнее (за счёт вызова функций MIN/MAX), но меньше по размеру.


