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

juvf

Свой
  • Постов

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

  • Посещение

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

    1

Весь контент juvf


  1. это Вы не в ту степь ушли. А теперь напишите enum class En {FROST } и попробуйте тоже самое - int temp = FROST; 🙂 я сказал "int temp = FROST; нет ни какой разницы FROST - это дефайн или енум.". При чем тут различия между enum и enum class? Речь шла о том, что имя "FROST" писать как eFROST или как FROST? Разницы нет.
  2. Это Вы немного не поняли о чем я говорил. И причем тут проблемы енума и понимание того, каким методом была задана константа?
  3. что-то я действительно не понял. но я понял то, что Вы это сами не писали 😉 Написал. Компилятор выдал ошибку 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; Разворачивай хоть что, хоть в чем.
  4. плюсую. int temp = FROST; нет ни какой разницы FROST - это дефайн или енум. нет ни какой разницы, с точки зрения конечного пользователя этой функции - она макрос, инлайн или обычная функция. Автор my_macro_func() принимает решение, как максимально эффективно её определить и решает сделать её макросом или функцией. Пользователя это не должно волновать. (более того, она вообще может быть и на асме определена, а может быть и из библиотеки взята, исходного кода которой у вас нет.) Тем более автор этой функции, может в любой момент переоформить её из макроса, в обычную функцию. Тогда Вам придется my_macro_func() переименовывать в my_func() - а это смена API. У пользователей посыпется сборка. мне казалось, что общепринятые правила, это имена функций и методов - с маленькойБуквы. см printf(), strlen(), open(), .... мне мешают нотации/префиксы/постфиксный. Я делаю все имена переменных/функцый - с маленькой, все имена типов/классов с большой. Наверно из Qt и FreeRTOS подчерпнул. Разделение слов - кэмл, без '_'.
  5. Тут скорее всего объявление не переменной, а переменных. Зачем в таком коде индекс у 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: определяется.
  6. 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"); } }
  7. 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
  8. я вот изначально и спросил - "как вы обновляетесь"? У меня куб автоматом не проверяет новую версию. ST качать в эту страну не дает. Приходится каждый раз через боль и унижение добывать новый инсталятор. Как обновить? Всё, нашел заветную кнопку. Вроде обновился до 1.14. Посмотрим как это будет работать. Спасибо.
  9. вот вчера решил работу взять на дом. дома куб версии 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 так может траблы в новой версией возникают в результате такого "обновления", при котором новая версия накатывается поверх старой? Там от старой версии останется плагин, который криво работает в новой и потом что-нибудь глючит.
  10. а как вы обновляетесь? Я как-то давно заметил, что на ПК стоит две версии кубИде, и стоят они в разных папках. При очередном "обновлении", я деинсталировал старую версию и установил новую. Т.е. это не "обновление" а установка. Встала новая версия в ...\soft\...\STM32CubeIDE_1.13.2\STM32CubeIDE. Т.е. новая не чего не "переустанавливает", а ставит рядом другую версию. Или есть именно "update" текущей версии и в папке ...\soft\...\STM32CubeIDE_1.9\STM32CubeIDE до новой версии и инсталятор накати версию 1.13 в папку 1.9?
  11. готу Свойства-Дженерал-редактор-аннотация-серч резалтс.... в общем вот
  12. Проблема с CH32V003

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

    Имеем МК CH32V003 + MounRever(с тулченом из коробки под Win). Вот два скриншота во время пошаговой отладки делаю шаг (step over) и получаю В 2-х словах в SpiCh32V003::writeRead() должно произойти чтение 2-х байт из SPI. В функцию передается аргумент outLen - кол-во байт для чтения из SPI. В начале функции перевожу CS в "0" на строке 155. outLen из 2 превращается в 16. Прерывания откл. До момента непосредственного чтения из SPI аргумент outLen становится 2356. Оптимизация в настройках проекта 0. Может код и будет работать правильно, а это трабла только с дебагом.... Кто с таким сталкивался? Что с этим делать?
  14. Да, восстановил и Wiring и там же восстанавливаются меню View. Спасибо.
  15. в каком общем меню? посмотрите ещё раз скрин 9-ки, посмотрите мой первый вопрос: Раньше на схемном редакторе, где-то на самом видном месте Как её вернуть назад установить в удобное место, как она была в AD9/AD15? у меня вид АД сейчас такой: Куда ткнуть и что перетащить, чтобы восстановить эти внопки и в виринг и в вью?
  16. что теперь делать? как и куда подгрузить Default?
  17. Попытался настроить тулбар Wiring. Эту кнопку не могу найти. Попытался перенести её с меню View в Wiring - в результате она исчезла из меню View. Как её вернуть в Wiring и в View?
  18. вот посмотрите, эта кнопка в 9-ке Вот эта кнопка в 16-ом Она была в 21-ом. Куда то делась. Как её вернуть? у меня нет её в Wiring-е. Как её туда вернуть?
  19. у меня тоже не получилось.
  20. AD 21.4. Раньше на схемном редакторе, где-то на самом видном месте, была кнопка "Set net colors". Не знаю, что случилось, может где-то настройки тулбаров поменял, но этой кнопки не стало. Еле еле нашел её в меню View->Set Net Colors. Как её вернуть назад установить в удобное место, как она была в AD9/AD15?
  21. Проблемы с STM8

    При попытке отладить/залить прогу из IAR в процессор получаю ошибку St-link + st8l051f3. IAR 3.11. На домашнем ПК всё работает. На рабочем ПК таже железка с тем же st-link - получаю "Couldn't find STM8L051F3 in the list of supported MCUs.". Ставил IAR с одного исходника. На рабочем ПК железка шьется/читается через STVP, через IAR не хочет. В этой ветке озвучивалась такая проблема. Кто с таким сталкивался? Как решить?
  22. STM32CubeIDE

    Обычно генераторы кода в начале файла пишут комент "Do not edit". В этом генераторе более демократичный подход и вам позволено писать вместе с генератором, но в секциях бегин-енд.
  23. Спасибо за пример, лишний раз убедился, что порядок include не должен влиять на собираемость проекта. Есть ещё примеры? что то там про аппаратные вычислители.... razrab83 говорит Вы его отсылаете к стандарту. Причем тут стандарт? а зачем? Если стандарт не определяет знаковость char - зачем к нему отсылать? Можно отослать к ГК РФ или к правилам ПДД - они тоже этого не утверждают. А кто или что интерпретирует char как знаковый или беззнаковый при компиляции? КОМПИЛЯТОР!!! (кто-то скажет архитектура... я бы поспорил, но не буду) Что-бы там не писали в стандарте, в ГК РФ, в ПДД или в этих ваших справочниках и учебниках, сколько бы вы тут постов не писали и какие бы пункты из стандарта не копипастили - мануал на компилятор IAR говорит ровно то, что делает IAR компилятор. By default, the compiler interprets the plain char type as unsigned. Интерпретирует plain char как unsigned. Пусть по стандарту 3 типа, пусть эти типы независимы, пусть будет 5 типов, пусть 2.... пусть даже стандарт утвердит char == signed char - компилятор будет интерпретирует plain char как unsigned. И не правы вы в том, что набрасываете на вентилятор ....., вместо того чтобы открыть и/или отослать к мануалу.
  24. хотел добавить, не успел.... а как вы прокомментируете мануал на с\с++ иара так весь сыр бор начался с того, чтобы в IDE не ставить галку "char is unsigned". Весь спор не за сухую абстракцию стандартов, а за то, как пишу программы. И исполняемый код выполняет АЛУ, которое char обработает как знаковое или нет. От этого будет зависить результат работы программы, а не от пунктов и формулировок в стандарте.
  25. а как вы тогда прокомментируете мой пример, приведённый выше, в котором plain char компилятор рассматривает как signed char?
×
×
  • Создать...