Jump to content

    

Integro

Свой
  • Content Count

    337
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Integro

  • Rank
    Местный
  • Birthday 04/13/1988

Контакты

  • Сайт
    http://
  • ICQ
    0

Информация

  • Город
    Минск

Старые поля

  • skype
    deniska_igorevich
  • Vkontakte
    http://vk.com/krasutski_denis
  • LinkedIn
    https://www.linkedin.com/in/denis-krasutski-721865104/

Recent Profile Visitors

2547 profile views
  1. Вы хотите сказать что вы как профессионал за разработку устройства с одной и той же функциональностью но на разных чипах, например STM8 и PIC18 заложите разные сроки и соответственно стоимость? Просто я так не делаю и цена разработки ПО для обоих случаев будет одинакова, по этому в своем грубом расчете ее опустил.
  2. IDE(громко сказано) можно скачать на сайте. Программатор и эмулятор стоят порядка 90$+90$ если брать в розницу, если брать партию от 10К :) пишут что подарят комплект для разработки(инфа из личной переписки через контакты с оф сайта) Пускай с доставкой это все обойдется в 300$, при партиях свыше одного 1К это уже будет иметь смысл. Но на партиях меньше чем пару тыщ, не вижу смысла считать центы! И, все зависит от преследуемых целей и решаемых задач...
  3. Дешевый: PMS154C RISC, Однократно программируемый, есть таймер но нет программируемого "dead time" и есть еще ряд нюансов(см datasheet), но дешевый!) Qty. Unit Price Ext. Price 5+ $0.0956 $0.478 50+ $0.0701 $3.505 150+ $0.0654 $9.81 500+ $0.0608 $30.4 2500+ $0.0587 $146.75 5000+ $0.0577 $288.5 20000+ $0.0554 $1108 60000+ $0.0543 $3258 P.S. Конкретно мне пока еще не довелось работать с данной IC, но висит на примете
  4. STM32L476 + SD. f_write выдает FR_DISK_ERR

    Объект это ведь &outFile, нужно смотреть в эту сторону...
  5. Операционная система.

    ARM это широкое понятие и никак не соотносится с ModBus. Готовый "стек"( стек громко сказано) работы с ModBus можно запустить и на AVR и PIC ограничения только в ресурсах микроконтроллера. Нужно знать особенности ядра (32битная архитектура, используемые регистры, стеки MSP, PSP), знать нюансы работы с контроллером прерываний, понимать как обрабатывать XXX_fault ы , знать о таких хардварных ускорителях как prefetch, cache, понимать что из cебя представляют MProtectionU, MMU. А дальше, уже по мере необходимости посматривать в даташит на периферию и примеры работы с ней. Есть разработчики которые пишут прикладное ПО для Windows, есть те кто разрабатывает драйвера или ядро Windows. Одни могут не понимать как работает компьютер, вторые же, без этих знаний работать не смогут. Тоже самое с микроконтроллерами Вы можете использовать готовый стек работы с каким либо железом и не заморачиваться, при этом будите ограничены предоставляемым функционалом и возможно даже не потеряете в производительности. Все зависит от вашей задачи и условий... OS в мире микроконтроллеров в своем большинстве, предоставляют только механизм реализации потоков(задач) + набор механизмов для взаимодействия между потоками(очереди, мьютексы, события, критические секции и тд). Да есть OS с прикрученными (или дополнениями) типо file system и sockets с очень схожим API но нигде нет стандатрного интерфейса работы с например PWM, I2C и тем же MAC для ethernet. По этому ваша высокоуровневая логика обычно требует еще слой абстракции для безболезненного переноса с одного контроллера на другой, если конечно, в этом есть необходимость
  6. Вот с этого нужно было начинать :) В итоге можно получить VERSION_STRING REVISION как строку но опять при помощи компилятора и через массив char заполняя его нужными символами, минус такого исполнения только один, выглядит криво, не так красиво как это мог сделать препроцессор.
  7. Если эти переменные не нужны и нигде не используются, достаточно добавить ключевое слово static в объявления и линкер не положит эти переменные в выходной бинарь. Как раз под рукой ARMCC(ARM Compiler 5.06 update 5 (build 528)), результирующая информация(без какой либо оптимизации): const uint32_t _day = BUILD_DAY; const uint32_t _month = BUILD_MONTH; const uint32_t _year = BUILD_YEAR; //Выхлоп: //Total RO Size (Code + RO Data) 6988 ( 6.82kB) //Total RW Size (RW Data + ZI Data) 12284 ( 12.00kB) //Total ROM Size (Code + RO Data + RW Data) 7012 ( 6.85kB) static const uint32_t _day = BUILD_DAY; static const uint32_t _month = BUILD_MONTH; static const uint32_t _year = BUILD_YEAR; //Выхлоп: //Total RO Size (Code + RO Data) 6976 ( 6.81kB) //Total RW Size (RW Data + ZI Data) 12284 ( 12.00kB) //Total ROM Size (Code + RO Data + RW Data) 7000 ( 6.84kB) Минус 12 байт!
  8. Уважаемый @jcxz 1. Вопрос я задавал не Вам, и ваши догадки, вероятно, никак не коррелируют с мыслю автора 2. Ваш пример несостоятелен
  9. Так не зависимо от того это #define "Some text" или const char text[]="Some text" строка с текстом будет будет храниться на Flash. Или речь о чем еще?
  10. Виноват, про строку что-то сразу не заметил. Но если действительно нужно сформировать строку в compile time здесь уже может помоч компилятор: #define BUILD_DATE (BUILD_DAY << 24 | BUILD_MONTH << 16 | BUILD_YEAR) #define BUILD_DAY ((uint32_t)((__DATE__[4] == ' ')?(__DATE__[5] - '0'):((__DATE__[4] - '0')*10 + (__DATE__[5] - '0')))) #define BUILD_MONTH ((uint32_t)((__DATE__[0] == 'J' && __DATE__[1] == 'a' && __DATE__[2] == 'n')*1 + \ (__DATE__[0] == 'F' && __DATE__[1] == 'e' && __DATE__[2] == 'b')*2 + \ (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'r')*3 + \ (__DATE__[0] == 'A' && __DATE__[1] == 'p' && __DATE__[2] == 'r')*4 + \ (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'y')*5 + \ (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'n')*6 + \ (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'l')*7 + \ (__DATE__[0] == 'A' && __DATE__[1] == 'u' && __DATE__[2] == 'g')*8 + \ (__DATE__[0] == 'S' && __DATE__[1] == 'e' && __DATE__[2] == 'p')*9 + \ (__DATE__[0] == 'O' && __DATE__[1] == 'c' && __DATE__[2] == 't')*10 + \ (__DATE__[0] == 'N' && __DATE__[1] == 'o' && __DATE__[2] == 'v')*11 + \ (__DATE__[0] == 'D' && __DATE__[1] == 'e' && __DATE__[2] == 'c')*12)) #define BUILD_YEAR ((uint32_t)((__DATE__[7] - '0')*1000 + (__DATE__[8] - '0')*100 + (__DATE__[9] - '0')*10 + (__DATE__[10] - '0'))) #define DIG_TO_CHAR(d) ((d)+'0') const uint32_t _day = BUILD_DAY; const uint32_t _month = BUILD_MONTH; const uint32_t _year = BUILD_YEAR; const char __DATE_RUS_FORMAT__[]= {DIG_TO_CHAR(_day / 10), DIG_TO_CHAR(_day % 10), '.', DIG_TO_CHAR(_month / 10), DIG_TO_CHAR(_month % 10), '.', DIG_TO_CHAR(_year / 1000 % 10), DIG_TO_CHAR(_year / 100 % 10), DIG_TO_CHAR(_year / 10 % 10), DIG_TO_CHAR(_year % 10), '\00'}; Как по мне, решение выглядит уродливо, но __DATE_RUS_FORMAT__ лежит уже расчитанный в секции с константами printf("Build date: %s\n",__DATE_RUS_FORMAT__); //Output: Build date: 19.04.2019
  11. Какой компилятор?
  12. Плюсую, должно работать!) Как уже сказали, на этапе компиляции может вычислятся значение константы, а вот в результате работы препроцессора(для макроса выше, const u32 day = BUILD_D;) должно выйти что-то типо этого: const u32 day = ((u32)(("Apr 17 2019"[4] == ' ')?("Apr 17 2019"[5] - '0'):(("Apr 17 2019"[4] - '0')*10 + ("Apr 17 2019"[5] - '0')))); И как уже сказали, такое удобно смотреть в листинге препроцессора, флаг"-Е" для armcc и gcc (по дефолту результат положит в объектный файл и дальше компиляция будет остановлена с ошибкой) и опция generate preproccesor output для IAR, будет создан отдельный файл с расширением .i
  13. Покажите нам (лучше двумя скринами отладчика) где и в какой момент при чтении эти значения отличаются + содержимое вашего внутреннего флеша (через окно memory)
  14. STM32L152VBH6A перепрограммирование.

    На каком пине светодиод?
  15. Я кстати тупанул, пишу BlueNRG-1 думаю о BlueNRG BlueNRG - Bluetooth® low energy wireless network processor, (Not recommended for New Design) BlueNRG-MS Bluetooth Low Energy Network Processor supporting Bluetooth 4.1 core specification MS-MasterSlave BlueNRG-1 Bluetooth Low Energy System On Chip(не нужен хост контроллер) BlueNRG-2 Bluetooth® low energy wireless system-on-chip(не нужен хост контроллер) BlueNRG-2 от BlueNRG-1 отличается большим размером флеш(256 против 160кБ), и заявлена совместимость с ядром 5.0. Оба могут работать как master\slave