Перейти к содержанию
    

juvf

Свой
  • Постов

    1 564
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

juvf стал победителем дня 13 марта

juvf имел наиболее популярный контент!

Репутация

9 Обычный

Информация о juvf

  • Звание
    Профессионал
    Профессионал

Контакты

  • Сайт
    Array
  • ICQ
    Array

Посетители профиля

6 801 просмотр профиля
  1. вот от куда ноги спора диалога растут.
  2. а причем тут строгая типизация? Вы, прежде чем кидаться словами, поймите, о чем речь идет, а потом уже будете обвинять других. Сбавьте обороты.
  3. это Вы не в ту степь ушли. А теперь напишите enum class En {FROST } и попробуйте тоже самое - int temp = FROST; 🙂 я сказал "int temp = FROST; нет ни какой разницы FROST - это дефайн или енум.". При чем тут различия между enum и enum class? Речь шла о том, что имя "FROST" писать как eFROST или как FROST? Разницы нет.
  4. Это Вы немного не поняли о чем я говорил. И причем тут проблемы енума и понимание того, каким методом была задана константа?
  5. что-то я действительно не понял. но я понял то, что Вы это сами не писали 😉 Написал. Компилятор выдал ошибку Error[Pe101]: "EN0" has already been declared in the current scope (�Hat line 32�h) myFile.cpp 36 Error[Pe101]: "EN1" has already been declared in the current scope (�Hat line 32�h) myFile.cpp 36 написал. И что? Что с этим дальше делать? Вы предлагаете int инициализировать типом A. А зачем? Теперь то, о чем я говорил. Допустим есть некий порог температуры. Автор программы библиотеки задает эту константу так: #define FROST 10 либо так enum {FORST = 10}; Сделал, отдал в продакшин. Теперь прикладной программист пишет свой код с использованием вашей библиотеки int temperature = FORST; //вот тут какая разница как в FORST попала 10? Тут прогер должен понимать, что создалась переменная типа int, и она инициализировалась значением 10. Это Эквивалент записи int temperature = 10; ps даже если очень жжет использовать enum class, очень хочется, но не хотите при каждом использовании кастовать, то закастуйте дефайном enum class A { EN0 = 10, EN1 = 20 }; #define FORST (static_cast<int>(A::EN0)) //так const int FORST2 = static_cast<int>(A::EN1); //ну или даже так int temp = FORST2 - FORST; //вот тут какая разница, как 10 и 20 попали/заменились на FORST и FORST2? эквивалент int temp = 10; Тут нужно понимать что в temp ляжет 10, которая вычислилась на этапе компиляции pps #define asd(m) (do(0){return 5*m;}) #define EN1 true #define TEMP2 asd(5) const int pi1 = 3; enum { ANGLE1 = pi1*10 + (EN1 ? TEMP2: 13)}; enum class A{ASD = ANGLE1, ASD2 = ANGLE1 + 6}; enum {QWE0 = static_cast<int>(A::ASD2), QWE1, QWE2}; #define POIU (QWE2 - 31) int angleOfHor = POIU; //в конечном счете это тоже самое, что и int angleOfHor = 32; Разворачивай хоть что, хоть в чем.
  6. плюсую. int temp = FROST; нет ни какой разницы FROST - это дефайн или енум. нет ни какой разницы, с точки зрения конечного пользователя этой функции - она макрос, инлайн или обычная функция. Автор my_macro_func() принимает решение, как максимально эффективно её определить и решает сделать её макросом или функцией. Пользователя это не должно волновать. (более того, она вообще может быть и на асме определена, а может быть и из библиотеки взята, исходного кода которой у вас нет.) Тем более автор этой функции, может в любой момент переоформить её из макроса, в обычную функцию. Тогда Вам придется my_macro_func() переименовывать в my_func() - а это смена API. У пользователей посыпется сборка. мне казалось, что общепринятые правила, это имена функций и методов - с маленькойБуквы. см printf(), strlen(), open(), .... мне мешают нотации/префиксы/постфиксный. Я делаю все имена переменных/функцый - с маленькой, все имена типов/классов с большой. Наверно из Qt и FreeRTOS подчерпнул. Разделение слов - кэмл, без '_'.
  7. Тут скорее всего объявление не переменной, а переменных. Зачем в таком коде индекс у i? С логической точки зрения кода, что делается в case 1: - объявляется переменная i - определяется значением р[1] - Вычисляется r = a*i; С точки зрения читаемости кода индекс не нужен. Попробуйте собрать так int Tst1(int a, int *p) { int r = -1; switch (a) { case 0: int i; i = p[0]; r = a + i; break; case 1: int i; i = p[1]; r = a * i; break; case 2: int i; i = p[2]; r = a << i; break; } return r; } Получите ошибку: Error[Pe101]: "i" has already been declared in the current scope. Скобочки решают эту проблему. Можно конечно без скобок и без индексов так сделать int Tst1(int a, int *p) { int r = -1; switch (a) { case 0: int i; i = p[0]; r = a + i; break; case 1: i = p[1]; r = a * i; break; case 2: i = p[2]; r = a << i; break; } return r; } Соберётся и будет работать. Но это вообще какой-то зашквар. Под case 0: объявляется переменная, а под case 2: определяется.
  8. STM32CubeIDE

    typedef struct { uint8_t family; uint8_t code[MAXDEVICES_ON_THE_BUS]; uint8_t crc; } RomCode; // RomCode romCode;//можно проинициализировать вот так = {.family = 1, .crc = 0xCA}; void main(void) { for(;;) { asm("nop"); } }
  9. STM32CubeIDE

    добавить (NOLOAD) не в bss, а в те секции, которые не должны попасть в hex .SPIbufSection (NOLOAD): { *(.SPIbuf) } >Memory_B0 .RxDecripSection (NOLOAD): { *(.RxDescripSection) } >Memory_B1 .TxDescripSection (NOLOAD): { *(.TxDescripSection) } >Memory_B2 .RxarraySection (NOLOAD): { *(.RxBUF) } >Memory_B3 .TxarraySection (NOLOAD): { *(.TxBUF) } >Memory_B4 Ну и вроде как звёздочки не хватает. .SPIbufSection (NOLOAD): { *(.SPIbufSection*) } >Memory_B0 У меня так секция ОЗУ описана /* Memories definition */ MEMORY { CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 64K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 192K FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K SDRAM (xrw) : ORIGIN = 0xC0000000, LENGTH = 4M } ..... .ARM.attributes 0 : { *(.ARM.attributes) } /* External RAM section */ .sdram (NOLOAD): { *(.sdram*); } >SDRAM
  10. я вот изначально и спросил - "как вы обновляетесь"? У меня куб автоматом не проверяет новую версию. ST качать в эту страну не дает. Приходится каждый раз через боль и унижение добывать новый инсталятор. Как обновить? Всё, нашел заветную кнопку. Вроде обновился до 1.14. Посмотрим как это будет работать. Спасибо.
  11. вот вчера решил работу взять на дом. дома куб версии 1,0,1. Решил "обновить" до 1,13,2. Запустил инсталятор, он предложил установить в папку C:\ST\STM32CubeIDE_1.13.2. Но у меня установлен куб 1,0,1 в папку D:\soft\ST\STM32CubeIDE_1.0.1. Хмммм.... а где сообщение "Дорогой друг! Я обнаружил, что на Вашем ПК установлена версия КубИдэ в папку D:\soft\ST\STM32CubeIDE_1.0.1. Хотите эту версию обновить до версии 1.13.2?" Т.е. нужно руками инсталятору указать старую папку. Думаю - нееее... сейчас новые exe и dll накатит поверх старых, какие-то перепишет, какие-то добавит, какие-то не тронет и они останутся мусором. Какие-то старые плуги эклипса останутся... что потом со всем этим делать? Запускаю Панель управления->Программы и приложения. Ищу "куб1.0.1", жму "удалить".... Удалил. Папка D:\soft\ST\STM32CubeIDE_1.0.1 осталась. В ней куча всяких плагинов, каких-то файлов. Скорее всего это не от приложения остатки, а всякие плуги от эклипса. Удалил полностью эту папку и накатил новую версию в новое место. Вопрос: А если Вы в старое место устанавливаете новую версию, т.е. в ...\ST\STM32CubeIDE_1.11.0 ставите v1.14.0, то что у вас в Панель управления->Программы и приложения? Там обе версии? Что будет удалятся, если выбрать "куб1.11.0"->"удалить"? ой, конечно же это вопрос к виндузятникам. ps так может траблы в новой версией возникают в результате такого "обновления", при котором новая версия накатывается поверх старой? Там от старой версии останется плагин, который криво работает в новой и потом что-нибудь глючит.
  12. а как вы обновляетесь? Я как-то давно заметил, что на ПК стоит две версии кубИде, и стоят они в разных папках. При очередном "обновлении", я деинсталировал старую версию и установил новую. Т.е. это не "обновление" а установка. Встала новая версия в ...\soft\...\STM32CubeIDE_1.13.2\STM32CubeIDE. Т.е. новая не чего не "переустанавливает", а ставит рядом другую версию. Или есть именно "update" текущей версии и в папке ...\soft\...\STM32CubeIDE_1.9\STM32CubeIDE до новой версии и инсталятор накати версию 1.13 в папку 1.9?
  13. готу Свойства-Дженерал-редактор-аннотация-серч резалтс.... в общем вот
  14. Проблема с CH32V003

    принял за априори, что код работает, а отображение переменной глючит. отладил код без дебага. всё рабтает. закрыл IDE. Сейчас ещё раз открыл IDE, пошагал в дебаге по с/с++... пока больше не наблюдаю этого эффекта. Все переменные в отладчике отображаются корректно. Вангую, что перезапуск IDE "вылечил" этот глюк.
  15. Проблема с CH32V003

    Имеем МК CH32V003 + MounRever(с тулченом из коробки под Win). Вот два скриншота во время пошаговой отладки делаю шаг (step over) и получаю В 2-х словах в SpiCh32V003::writeRead() должно произойти чтение 2-х байт из SPI. В функцию передается аргумент outLen - кол-во байт для чтения из SPI. В начале функции перевожу CS в "0" на строке 155. outLen из 2 превращается в 16. Прерывания откл. До момента непосредственного чтения из SPI аргумент outLen становится 2356. Оптимизация в настройках проекта 0. Может код и будет работать правильно, а это трабла только с дебагом.... Кто с таким сталкивался? Что с этим делать?
×
×
  • Создать...