Вопросы по С/С++ (СИ)
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
В ветке арм за всех адептов 25ый позитиф отдуваясь, красноречиво доказывает что "легкий порог" вхождения с калокубом и спл лишь в ваших влажных фантазиях. И железо знать обязательно...
- Реклама
- Сообщения: 3389
- Зарегистрирован: Пн окт 11, 2010 19:00:08
А ты попробуй рассказать ему про регистры и посоветуй писать прогу без либ.
Посмотрим что получится.
Если не понимаешь что делаешь, нет разницы, используются либы или нет, результат одинаков - нестабильно работающий код.
Если не понимаешь что делаешь, нет разницы, используются либы или нет, результат одинаков - нестабильно работающий код.
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
Ну тебя же взбудоражила ошибка isx , и ты не смог не нагадить.
Мы то чем хуже?
Мы то чем хуже?
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Мурик",url="/forum/viewtopic.php?p=3484552#p3484552"]А ты попробуй рассказать ему про регистры и посоветуй писать прогу без либ.
Посмотрим что получится.
[/uquote]Вот смотри, в результате многодневной прочистки кармы он родил вот это.
Неужели трудней было написать
Видя старания, мы бы раскрутили до такого
Код: Выделить всё
void USART3_IRQHandler(void)
{
/* USER CODE BEGIN USART3_IRQn 0 */
uint8_t X; // Описание приемника числа.
/* USER CODE END USART3_IRQn 0 */
HAL_UART_IRQHandler(&huart3);
/* USER CODE BEGIN USART3_IRQn 1 */
HAL_UART_Receive_IT(&huart3, &X, 1); // Вызов прерывания по uаrt.
TIM1->CCR1 = X; // Записываем в счетный регистр принятый по uart X.
/* USER CODE END USART3_IRQn 1 */
}Код: Выделить всё
void USART3_IRQHandler(void)
{
TIM1->CCR1 = USART3->DR;
}
Код: Выделить всё
void USART3_IRQHandler(void)
{
if(USART3->SR & (USART_SR_PE | USART_SR_FE | USART_SR_NE | USART_SR_ORE))
{ //Была ошибка в приеме байта
USART3->DR;
}
else
{ //Байт принят корректно
TIM1->CCR1 = USART3->DR;
}
}
[uquote="a5021",url="/forum/viewtopic.php?p=3484181#p3484181"][uquote="ARV",url="/forum/viewtopic.php?p=3484144#p3484144"]упаси бог, оно мне надо?![/uquote]Собственные промахи вам приятнее объяснять коварством извне? Немного странно, конечно, но вполне объяснимо.[/uquote]ваш тупой психоанализ абсолютно неуместен.
если вы сумеете объяснить, с какой целью следует писать то, что вы приводил в качестве курезного примера, я готов признать вашу правоту на счет коварства. если же не сумеете, то вам придется признать, что так пишут исключительно ради выпендрёжа, чтобы продемонстрировать глубины "понимания" Си.
только прошу учесть, что под целью следует понимать именно насущную необходимость, побороть которую иначе будет сложно или невозможно, а не какое-то "можно, значит, имею право". и заранее вычеркиваем в качестве цели некое "упрощение кода", т.к. код явно не упрощается.
так какие будут ваши доказателства?

если вы сумеете объяснить, с какой целью следует писать то, что вы приводил в качестве курезного примера, я готов признать вашу правоту на счет коварства. если же не сумеете, то вам придется признать, что так пишут исключительно ради выпендрёжа, чтобы продемонстрировать глубины "понимания" Си.
только прошу учесть, что под целью следует понимать именно насущную необходимость, побороть которую иначе будет сложно или невозможно, а не какое-то "можно, значит, имею право". и заранее вычеркиваем в качестве цели некое "упрощение кода", т.к. код явно не упрощается.
так какие будут ваши доказателства?

если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
- Сообщения: 2316
- Зарегистрирован: Вс июн 26, 2011 20:03:21
Пардон, действительно фигню сморозил. Последнее время приходится работать с HAL - походу стал деградировать на этом фоне 
Собственно из-за чего весь кипишь. У меня последнее время часто возникает ситуация, когда нужно портировать проекты с STM32F1 на STM32F0,F3 и наоборот. А у этих серий есть серьёзное различие -в серии F1 скорость и режим работы выводов устанавливаются в регистрах CRL (для пинов 0-7) и CRH (для пинов 8-15), а в F0 и F3 за режим отвечает регистр MODE, а за скорость OSPEEDR. Вот я и хочу написать универсальный макрос, чтоб при каждом портировании не заниматься массовым переименовыванием 80-ти пинов.
А вообще, куб штука хорошая, если нужно быстро написать какую-то программу, но не дай бог потом вам проводить манипуляции с периферией (особенно если вы вносили изменения в их местами убогие библиотеки), то это все -
пи*дец
Собственно из-за чего весь кипишь. У меня последнее время часто возникает ситуация, когда нужно портировать проекты с STM32F1 на STM32F0,F3 и наоборот. А у этих серий есть серьёзное различие -в серии F1 скорость и режим работы выводов устанавливаются в регистрах CRL (для пинов 0-7) и CRH (для пинов 8-15), а в F0 и F3 за режим отвечает регистр MODE, а за скорость OSPEEDR. Вот я и хочу написать универсальный макрос, чтоб при каждом портировании не заниматься массовым переименовыванием 80-ти пинов.
А вообще, куб штука хорошая, если нужно быстро написать какую-то программу, но не дай бог потом вам проводить манипуляции с периферией (особенно если вы вносили изменения в их местами убогие библиотеки), то это все -
пи*дец
- Сообщения: 353
- Зарегистрирован: Вс янв 19, 2014 22:41:55
[uquote="isx",url="/forum/viewtopic.php?p=3484269#p3484269"]Мне нужно чтоб при выполнении кода не было никаких лишних действий - чисто запись регистра и все![/uquote]
Есть мнение, что оптимизатор сводит конструкцию типа:
к
так что даже ужас типа многостраничного switch по известному на момент компиляции параметру сведётся к подстановке тела соответствующего case. Ну и чаще всего это легко проверяется по ассемблерному листингу в папке с промежуточными файлами компиляции.
[uquote="isx",url="/forum/viewtopic.php?p=3484269#p3484269"]Кстати, а вот такая портянка имеет право на существование? Компилятор вроде не ругается...[/uquote]
Опять-же вспомним учение о троице - препроцессор, компилятор и линкер. Между первым и вторым результат подстановки вашего этого #define будет уже известен - включите в свойствах проекта опцию preprocessing only или do not remove intermediate files (ну или где-то как-то так) и посмотрите после компиляции в папке с промежуточными файлами, что на самом деле передаётся компилятору от препроцессора. Вот там и увидите во что превратилась ваша конструкция.
Есть мнение, что оптимизатор сводит конструкцию типа:
Код: Выделить всё
if (7 < 5)
a = b;
else
a = c;
Код: Выделить всё
a = c;
[uquote="isx",url="/forum/viewtopic.php?p=3484269#p3484269"]Кстати, а вот такая портянка имеет право на существование? Компилятор вроде не ругается...
Код: Выделить всё
#define ISX_GPIO_PIN_SET (PORT, PIN) #if PIN<8 GPIO##PORT->CRL = ISX_GPIO_BS##PIN #else GPIO##PORT->CRH = ISX_GPIO_BS##PINОпять-же вспомним учение о троице - препроцессор, компилятор и линкер. Между первым и вторым результат подстановки вашего этого #define будет уже известен - включите в свойствах проекта опцию preprocessing only или do not remove intermediate files (ну или где-то как-то так) и посмотрите после компиляции в папке с промежуточными файлами, что на самом деле передаётся компилятору от препроцессора. Вот там и увидите во что превратилась ваша конструкция.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
- Сообщения: 3389
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Надо было в той теме писать. Сюда он наверно не зайдет.VladislavS писал(а):Неужели трудней было написать
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Мурик",url="/forum/viewtopic.php?p=3484902#p3484902"]Надо было в той теме писать. Сюда он наверно не зайдет.[/uquote]А я не ему это писал. Там знаний ноль без палочки, бесполезная трата времени. Наиграется со своей дискавери или сожжёт и забьёт на это всё.
- Сообщения: 3389
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Для меня писали?VladislavS писал(а):А я не ему это писал.
Я бы возможно сделал по другому. Если данные в USART приходят часто, прерывание от USART настроил бы только на события ошибок, а копирование из USART3->DR в TIM1->CCR1 сделал бы через DMA, при наличии свободного канала связанного с USART3.
- Сообщения: 6457
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="ARV",url="/forum/viewtopic.php?p=3484794#p3484794"]если вы сумеете объяснить, с какой целью следует писать то, что вы приводил в качестве курезного примера[/uquote]
А с чего вы заключили, что это были рекомендации? Ваши фантазии и ничего кроме. Как обычно, впрочем.
А с чего вы заключили, что это были рекомендации? Ваши фантазии и ничего кроме. Как обычно, впрочем.
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
[uquote="Мурик",url="/forum/viewtopic.php?p=3484943#p3484943"]Я бы возможно сделал по другому.[/uquote]
Конечно по другому, но и не как ты.
Передавать по UART однобайтовыми транзакциями могут только ты и позитиф25, вменяемые оперируют пакетами...
Конечно по другому, но и не как ты.
Передавать по UART однобайтовыми транзакциями могут только ты и позитиф25, вменяемые оперируют пакетами...
- Сообщения: 3389
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Задача была такой. https://radiokot.ru/forum/viewtopic.php ... 5#p3484785
Там есть хоть намек про пакеты?
PS.
Досик, что ты постоянно злой как собака? Если в личной жизни кто-то не так, не выплескивай злость в сеть!
Там есть хоть намек про пакеты?
PS.
Досик, что ты постоянно злой как собака? Если в личной жизни кто-то не так, не выплескивай злость в сеть!
WatchDog.Mode = MODE_NOT_FIT_DOGMA_DETECTEDМурик писал(а): что ты постоянно злой как собака?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
[uquote="Мурик",url="/forum/viewtopic.php?p=3485051#p3485051"]Там есть хоть намек про пакеты?[/uquote]
Какая задача, ты вообще о чем?
ТовариСЧ всего лишь тыркается.
Сразу видно, что подобное ты не решал никогда и серьезнее своих свистоперделок не делал...
Какая задача, ты вообще о чем?
Сразу видно, что подобное ты не решал никогда и серьезнее своих свистоперделок не делал...
- Сообщения: 6457
- Зарегистрирован: Пт сен 13, 2013 13:11:31
Слабо сходу сказать, что напечатает этот код и почему?:

Код: Выделить всё
#include <stdio.h>
int main() {
char *u = "*u = %u\n";
printf(u, (!u)[u]);
return 0;
}*u = <ascii код звездочки>
Так?
Так?
- Сообщения: 6457
- Зарегистрирован: Пт сен 13, 2013 13:11:31
Я не пробовал, но из кода вроде именно такое вырисовывается.
Добавлено after 3 minutes 10 seconds:
"*u = %u\n" - константная строка, u - указатель на неё. Это же - формат для printf.
Самая тонкость - (!u). Посколько u - не NULL, то получается 0, а это то же самое что и u[0] - то есть '*'. Ну а из-за формата %u будет выведен не сам символ, а его ascii код в десятичном основании.
Добавлено after 3 minutes 10 seconds:
"*u = %u\n" - константная строка, u - указатель на неё. Это же - формат для printf.
Самая тонкость - (!u). Посколько u - не NULL, то получается 0, а это то же самое что и u[0] - то есть '*'. Ну а из-за формата %u будет выведен не сам символ, а его ascii код в десятичном основании.
- Сообщения: 6457
- Зарегистрирован: Пт сен 13, 2013 13:11:31
Эх, пропала интрига. 
Сюжет был завязан на то, что u[n] == n == *(n * sizeof(char) + u)
Сюжет был завязан на то, что u[n] == n == *(n * sizeof(char) + u)


