Jump to content

    

razrab83

Участник
  • Content Count

    212
  • Joined

  • Last visited

Community Reputation

0 Обычный

About razrab83

  • Rank
    Местный

Recent Profile Visitors

1167 profile views
  1. offtop: было всё на альтере. переехали на говин. говин отказались поставлять свои чипы. у китайских говин оказался американский собственник. Будьте осторожны.
  2. STM32CubeIDE

    Tor Browser дает скачивать. Vpn наверно то же.
  3. разница в том, что если явно написано "2+2" - это "2+2". Это явная запись "2+2", а не запись "Съешь ещё этих французских булочек". Хотя, при желании "+" можно перегрузить, и это будет что угодно. Привет индусскому коду, аля typedef true false а если написано "a | b ^ c & s" - тут неявная расстановка приоритетов, требующая помнить все 17 уровней. В неявных "операциях", гораздо чаще стрельнуть в ногу (отсыл к неявным приведениям типа, которые в с++ не приветствуются). Такой код "(a | (b ^ (c & s)))" даст такой же результат, но тут явно видно приоритеты. Даже если программист забыл, что "&" выше, чем "^", ни чего страшного, со скобками - ни автор, ни читающий не запутаются. не нужно мне приписывать что-то от себя. я этого не предлагал. ps а ещё в шк и вузе, пишут писали z = (a + b) + (x + y). Математически это тоже самое, что и без скобок, но понятнее из чего складывается z, ровно как и понятнее из чего складывается такой if if(((a - b) < 10) || ((b & 0xF) >= (a - 1)))
  4. не нужно путать тёплое с мягким. тут явный оператор "+=". if(a - b < 10 || b & 0xF >= a - 1) - тут неявная "расстановка" приоритетов.
  5. ППКС. в шк всего 2 приоритета. в си около 17. Все знают что в си у Операторы "&","|" и "^" разный приоритет?: Не заглядывая в справочник расставите приоритеты между ними? Ну во первых действительно, нужно однозначно понимать, что автор делает: он ошибся в приоритете, или он так и хотел сделать? Во вторых, зачастую код мигрирует из языка в язык. В одном языке у операций один приоритет, в другом другой. Я всегда расставляю приоритеты сам, вручную, скобками. Мне читать такой код понятнее. 1. тип int. рассчитываем управление вентиляции по некой формуле, причем, если на улице светло, то добавляем константу #define ASD 314 p = a*b + c*g + ASD * (getLighting() > lightingThreshold); или собираем регистр статуса. в 0-ом бите нужно выставить бит в 1, если температура выше 40 statusReg = a | (temperature > 40);
  6. В помощь ТС - ссылка Там изобилуют такими сообщениями, как... "Мы - профессионалы своего дела", "Начальная стоимость разработки от 71 000 руб.", "Почему выбирают нас? ..бла бла бла... при этом наш уровень цен на 10-15% ниже среднерыночных"
  7. STM32CubeIDE

    7-ка - это в какой версии идэ? у меня не самая свежая по дуфолту стоит gcc 9.3.1 Если нужен другой, так добавь его как в обычном eclipse скачивай/устанавливай/собирай сам - свой любимый компилятор toolchain далее Project->Properties->C++/Build->Settings->Tool Settings->MPU Toolchain->Open toolchain manager... В открывшемся окне Add Local. Дальше добавляй 10.3 предлагаемую на developer.arm.com любой тулчейн. ps Пока писал, в Open toolchain manager с инета вывалились другие тулченый, которые можно исталировать.
  8. В сматфонах/ноутбуках иногда стоит индикатор уведомлений - такая маленькая цветная точка. Что за светодиод используется? Там вроде не простой rgb smd0805, там какой-то яркий светодиод с линзой размером меньше 1мм.
  9. 1) не правильная. используйте события. 2) сп п.1, вопрос 2 решается в событиях. ps 3) вы заходите в первый if, вызываете xSemaphoreTake(). Этот метод никогда (с аргументом portMAX_DELAY) вам не вернет что-то отличное от pdPASS. xSemaphoreTake() блокирует выполнение задачи до получения семафора. Из прерывания отпускается семафор UP, задача разблокируется и вы зажигаете светодиод на ПИН_9. Что будет дальше? Что вы ожидаете от своего кода? Дальше заного начинает выполняться код в главном цикле, т.е. for(;;). Вы опять попадаете в ПЕРВЫЙ if. Опять блокируетесь бесконечно долго на на xSemaphoreTake() в ожидании нажатя кнопки "вверх". При нажатии "вверх" вы опять зажигаете светодиод на ПИН_9. Как вы хотели попасть во второй if? Ваш код ни когда не попадет во второй if.
  10. 1)вставь в log_printf слып void log_printf(const char *tag, const char *msg, ...) { xSemaphoreTake(log_mtx, portMAX_DELAY); va_list list; /* Got time and str time &date */ rtc_get_str_time(str_arr); xputs(str_arr); xputs(tag); /* Copy tag */ xputs(": "); va_start(list, msg); xvfprintf(uart_putc, msg, list); va_end(list); vTaskDelay(1000); //синтаксис не помню, см RM xSemaphoreGive(log_mtx); } запусти 20 10 таких задач void StartHearbeatTask(void const * argument) { static const char *tag = "Hearbeat"; log_printf(tag,"START\r\n"); for(;;) vTaskSleep(100); //Heatbeat_task(); } ОС валится? Если нет, то хитбит в студию Или может при запуске >10 задач стек переполняется? Метод vApplicationStackOverflowHook() определён? В него попадаешь? ps 2) задачу оставь со слыпом как в 1), а лог такой void log_printf(const char *tag, const char *msg, ...) { xSemaphoreTake(log_mtx, portMAX_DELAY); for(int i = 0; i< 500; i++) //печатаем что-то долгое, с чего валится ОС { va_list list; /* Got time and str time &date */ rtc_get_str_time(str_arr); xputs(str_arr); xputs(tag); /* Copy tag */ xputs(": "); va_start(list, msg); xvfprintf(uart_putc, msg, list); va_end(list); } xSemaphoreGive(log_mtx); } Валится?
  11. Некий неадекватный персонаж jcxz неоднократно пишет оскорбления, переходит на личности в "Cистемный уровень проектирования\Операционные системы\Программирование". Почему ему всё сходит с рук??? За гораздо меньшее других переводили в RO, ну или по-крайней мере удаляли посты. jcxz предлагает явно не рабочие решения (противоречащие стандарту языка программирования), и продолжает врать, что у него это работает. При этом постоянно переходит на оскорбления, нарушая пункт 2.1 правил форума. Подавал жалобу уже не раз на него - и нет никакой реакции. В "Cистемный уровень проектирования\Операционные системы\Программирование" вообще есть модератор?
  12. Да, в плюсах const int array[] объявленный 2 раза в разных исходниках собирается, без const нет. В си с const - нет.
  13. Нарушено правило ODR. Я же разжевал в чем косяк? См мой пост выше. Или вы издеваетесь? Модератор, дайте бан jcxz на пару недель, за издевательство. Может знание по С/С++ подтянет. Вы хотите сказать, что если вы в двух исходных файлах определите две глобальные переменные с одинаковым именем, то ваш линкер это проглотит? Если да, то вы не на с/с++ пишите. Вам тут не место на другой форум. Ну во первых у меня нет подобной проблемы, т.к. я подобный говнокод не генерирую. Во вторых, если кто и "оступиться", то компилятор линкер сообщит проблему и она легко правиться, и ни нужно ни куда ни чего писать. ну и в третих.... встречаются начинающие программисты, которые не могут справиться с Li006, они пишут об этом, просят помощь, даже на электрониксе. Поищите. ps собрал холоворд на gcc с вашим кодом - тоже самое, даже код ошибки такой же. Уже не требуется. Сделал именно через указатель. Всё равно спасибо!
  14. А вы не видите какой косяк в этом коде, не компилируя его? "дупликэйт дифинишин" - извините за мой французкий duplicate definition. Какая взаимосвязь между "множественным определением" и "множественным включением"? Естественно во всех хидерах есть #ifndef ASD_H. И? В приличных домах обычно, переменные объявляют в хидерах, определяют в исходниках. Включите #include "asd.h" в несколько *.с, компилятор в каждом *.с определит array (мне это зачем?), линкер дает законную ошибку дупликэйт дифинишин Error[Li006]: duplicate definitions for "array"; ps Научитесь держать слово за себя. Все другие сами за себя скажут.