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

demiurg_spb

Свой
  • Публикаций

    2 746
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

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

  • Звание
    неотягощённый злом
  • День рождения 08.01.1980

Контакты

  • Сайт
    http://www.automatix.ru
  • ICQ
    486167559

Информация

  • Город
    Санкт-Петербург
  1. Проблема ассемблером для 1986ВЕ92

    Чем раньше перейдёте с АСМ на Си тем крепче будет ваше здоровье. Не шутка.
  2. Инлайновая функция

    Тут ещё extern inline не обсосали))) Помню что в стандарте это описывается. С ходу нашёл лишь https://www.ibm.com/support/knowledgecenter...ine_linkage.htm http://m68hc11.serveftp.org/inline-1.php
  3. Инлайновая функция

    То, то. ИМХО внутри _Pragma(...) можно всё что угодно написать (даже "inline = forced") и задефайнить...
  4. Инлайновая функция

    Немного погуглив нашёл _Pragma(...) #ifdef IAR #define NO_OPT _Pragma ("optimize=none") #endif NO_OPT void some_func(void) { … }
  5. Инлайновая функция

    А в IAR разве нет атрибутов наподобие gcc и keil? У меня написан compiler.h в котором все нюансы компиляторов запрятаны. Типа #if defined(__GNUC__) # define __is_always_inline __inline__ __attribute__((__always_inline__)) #endif А пользовательский код никаких специфических вещей компиляторов не использует - только свою прослойку. static __is_always_inline void foo(void) { // do something } ИМХО прагмы в коде последнее дело...
  6. Инлайновая функция

    файл .h static inline uint32_t SYSTIME_GetSystemTime(void) { //do something } и всё
  7. Функция sprintf

    Может банальное переполнение буфера? HINT: Попробуйте на snprintf заменить и в будущем только её и использовать...
  8. Цитата(Forger @ May 7 2018, 18:05) Вангую, что останется самая простая и примитивная из них.Ага))) и звать её ssize_t подробнее тут
  9. Цитата(Сергей Борщ @ May 2 2018, 22:55) А решение "в лоб" не работает?Телепатирую))) Видимо нет, т.к. хочется видеть разный вывод: size before: XXX size after: XXX
  10. *char to long

    Посмотрите файлик modbus-data.c из библиотеки libmodbus.
  11. Цитата(Trashy_2 @ Jan 22 2018, 16:39) В общем, как заставить работать первый вариант? я полагаю так: Код#define _svComandLine(vROW_Z) Serial2.print("\e["#vROW_Z";1H"); #define svComandLine(vROW_Z) _svComandLine(vROW_Z)
  12. Может Вам пригодится... Для многих АВРок есть возможность тоглить (инвертировать) состояние GPIO путём записи в регистр PINx. Пример инверсии нулевого и седьмого бита в порту Б: КодPINB = (1<<7)|(1<<0); Вот список моделей для которых это можно CODE #if defined(__AVR_AT90PWM1__) \ || defined(__AVR_AT90PWM2__) \ || defined(__AVR_AT90PWM2B__) \ || defined(__AVR_AT90PWM3__) \ || defined(__AVR_AT90PWM3B__) \ || defined(__AVR_AT90PWM216__) \ || defined(__AVR_AT90PWM316__) \ || defined(__AVR_AT90PWM81__) \ || defined(__AVR_AT90USB82__) \ || defined(__AVR_AT90USB162__) \ || defined(__AVR_ATmega8U2__) \ || defined(__AVR_ATmega16U2__) \ || defined(__AVR_ATmega32U2__) \ || defined(__AVR_ATmega16U4__) \ || defined(__AVR_ATmega32U4__) \ || defined(__AVR_ATmega32U6__) \ || defined(__AVR_AT90USB646__) \ || defined(__AVR_AT90USB647__) \ || defined(__AVR_AT90USB1286__) \ || defined(__AVR_AT90USB1287__) \ || defined(__AVR_AT90CAN32__) \ || defined(__AVR_AT90CAN64__) \ || defined(__AVR_AT90CAN128__) \ || defined(__AVR_ATmega16M1__) \ || defined(__AVR_ATmega32M1__) \ || defined(__AVR_ATmega64M1__) \ || defined(__AVR_ATmega32C1__) \ || defined(__AVR_ATmega64C1__) \ || defined(__AVR_ATmega48__) || defined(__AVR_ATmega48A__) \ || defined(__AVR_ATmega88__) || defined(__AVR_ATmega88A__) \ || defined(__AVR_ATmega168__) || defined(__AVR_ATmega168A__) \ || defined(__AVR_ATmega48P__) || defined(__AVR_ATmega48PA__) \ || defined(__AVR_ATmega88P__) || defined(__AVR_ATmega88PA__) \ || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega168PA__) \ || defined(__AVR_ATmega328__) \ || defined(__AVR_ATmega328P__) \ || defined(__AVR_ATmega640__) \ || defined(__AVR_ATmega1280__) \ || defined(__AVR_ATmega1281__) \ || defined(__AVR_ATmega2560__) \ || defined(__AVR_ATmega2561__) \ || defined(__AVR_ATmega164A__) \ || defined(__AVR_ATmega164P__) || defined(__AVR_ATmega164PA__) \ || defined(__AVR_ATmega324A__) \ || defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324PA__) \ || defined(__AVR_ATmega644__) || defined(__AVR_ATmega644A__) \ || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) \ || defined(__AVR_ATmega1284P__) \ || defined(__AVR_ATmega165__) || defined(__AVR_ATmega165A__) \ || defined(__AVR_ATmega165P__) || defined(__AVR_ATmega165PA__) \ || defined(__AVR_ATmega325__) || defined(__AVR_ATmega325A__) \ || defined(__AVR_ATmega325P__) \ || defined(__AVR_ATmega3250__) \ || defined(__AVR_ATmega3250P__) \ || defined(__AVR_ATmega645__) || defined(__AVR_ATmega645A__) \ || defined(__AVR_ATmega645P__) \ || defined(__AVR_ATmega6450__) || defined(__AVR_ATmega6450A__) \ || defined(__AVR_ATmega6450P__) \ || defined(__AVR_ATmega169__) || defined(__AVR_ATmega169A__) \ || defined(__AVR_ATmega169P__) || defined(__AVR_ATmega169PA__) \ || defined(__AVR_ATmega329__) || defined(__AVR_ATmega329A__) \ || defined(__AVR_ATmega329P__) || defined(__AVR_ATmega329PA__) \ || defined(__AVR_ATmega3290__) \ || defined(__AVR_ATmega3290P__) \ || defined(__AVR_ATmega649__) || defined(__AVR_ATmega649A__) \ || defined(__AVR_ATmega6490__) || defined(__AVR_ATmega6490A__) \ || defined(__AVR_ATmega6490P__) \ || defined(__AVR_ATmega649P__) \ || defined(__AVR_ATmega406__) \ || defined(__AVR_ATmega8HVA__) \ || defined(__AVR_ATmega16HVA__) \ || defined(__AVR_ATmega16HVA2__) \ || defined(__AVR_ATmega16HVB__) \ || defined(__AVR_ATmega32HVB__) \ || defined(__AVR_ATmega64HVE__) \ || defined(__AVR_ATtiny261__) || defined(__AVR_ATtiny261A__) \ || defined(__AVR_ATtiny461__) || defined(__AVR_ATtiny461A__) \ || defined(__AVR_ATtiny861__) || defined(__AVR_ATtiny861A__) \ || defined(__AVR_ATtiny2313__) || defined(__AVR_ATtiny2313A__) \ || defined(__AVR_ATtiny4313__) \ || defined(__AVR_ATtiny13__) || defined(__AVR_ATtiny13A__) \ || defined(__AVR_ATtiny25__) \ || defined(__AVR_ATtiny45__) \ || defined(__AVR_ATtiny85__) \ || defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny24A__) \ || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny44A__) \ || defined(__AVR_ATtiny84__) \ || defined(__AVR_ATtiny43U__) \ || defined(__AVR_ATtiny48__) || defined(__AVR_ATtiny88__) \ || defined(__AVR_ATtiny87__) || defined(__AVR_ATtiny167__) # define PIN_TOGGLE_BY_PIN_WRITE 1 #else # define PIN_TOGGLE_BY_PIN_WRITE 0 #endif
  13. Такты инструкций условного выполнения

    Там два разных примера и смысл там, насколько я понимаю, такой: Первый пример - традиционный с условным переходом, где каждая ветка имеет свои уникальные инструкции, помимо общих инструкций проверки условия и условного перехода. Второй пример - линейный с использованием условного выполнения на стадии каждой инструкции и если инструкция не нужна, она трактуется как NOP и выполняется за 1 такт - чудес не бывает))). Второй лучше тем, что линейный и не требует перезагрузки конвейера, как в случае с переходом, а так же не тратит время на сам переход. Первый лучше тем, что работает на всех ARM Cortem-M, включая M0.
  14. Цитата(krux @ Jan 25 2018, 19:40) приведенный выше пример справедлив, например, когда есть тормозная флешка и быстрая и большая внешняя DDR. тогда cstartup как раз скопирует константу, к которой нужен быстрый и частый доступ в DDR.В таких система обычно весь flash без разбора копируется в ОЗУ задолго да cstartup.