jeka 0 28 ноября, 2019 Опубликовано 28 ноября, 2019 · Жалоба Есть ли более человеческая IDE чем mplab X? с mplab второй раз столкнулся, какая-то лютая жесть после arm... убивают следующие вещи: - дикие тормоза дебаггера и при компиляции-загрузке прошивки размером в... 500 инструкций - оптимизатор C - без комментариев. Деление на степень двойки не умеет в сдвиг превращать, а если делаешь сдвиг, например на 3, то вместо 3х команд сдвига разворачивает цикл команд на 10. Порылся в настройках, опций оптимизатора не нашел. LATAbits.LATA4^=1 - просто под стол уполз... Spoiler 0x68: MOVLB 0x2 0x69: SWAPF LATA, W 0x6A: ANDLW 0x1 0x6B: MOVWF 0x173 0x6C: MOVLW 0x1 0x6D: XORWF 0x173, F 0x6E: SWAPF 0x173, F 0x6F: MOVF LATA, W 0x70: XORWF 0x173, W 0x71: ANDLW 0xEF 0x72: XORWF 0x173, W 0x73: MOVWF LATA dgram_ptr++; - инструкцию incf компилятор не знает? Spoiler 0x74: MOVLW 0x1 0x75: MOVWF 0x173 0x76: MOVF 0x173, W 0x77: ADDWF 0x17C, F Вообщем я в раздумьях. стоит ли с пиками дальше связываться... иар поддержку пиков давно убрал, альтернатив мплабу особо не вижу... На асме писать ну очень не хочется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 28 ноября, 2019 Опубликовано 28 ноября, 2019 · Жалоба 1 minute ago, jeka said: стоит ли с пиками дальше связываться... Похоже, что cortex-m0 уделывают их по стоимости. Если вы, конечно, не о dsPIC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jeka 0 28 ноября, 2019 Опубликовано 28 ноября, 2019 · Жалоба уделывают. stm32f030 = 20(!) рублей. Единственное преимущество 8биток - это потребление. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 28 ноября, 2019 Опубликовано 28 ноября, 2019 · Жалоба 31 minutes ago, jeka said: Единственное преимущество 8биток - это потребление. Ну m0 как раз по энергопотреблению не проигрывают, и создавались как замена восьмибиткам по этому параметру тоже. Правда для меня энергопотребление совершенно неактуально. 32 minutes ago, jeka said: уделывают. stm32f030 = 20(!) рублей. Это где такие цены??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jeka 0 28 ноября, 2019 Опубликовано 28 ноября, 2019 · Жалоба Just now, haker_fox said: Это где такие цены??? компэл или элитан, если объем брать Just now, haker_fox said: Ну m0 как раз по энергопотреблению не проигрывают, проигрывают. на stm можно что-то обсчитывать (если pll выключен) на токе порядка 20-30 мка, а standby менее 10мка не сделаешь. На пике же можно неспешно выполнять код на токе 1мка, а ждать вообще на 0.1мка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 28 ноября, 2019 Опубликовано 28 ноября, 2019 · Жалоба MIKROC PRO? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrey_p 0 28 ноября, 2019 Опубликовано 28 ноября, 2019 · Жалоба Я познакомился с пиками ещё в середине 90-х, очень много писал под pic16 и pic17. Писал на ASM в MPLAB, как для себя, так и на коммерческой основе. Проекты были достаточно большие, с задействованием богатой периферии и математики. Несколько раз пытался перейти на Си, но не видел ни одного вменяемого компилятора для 8-битных микроконтроллеров PIC. Код получался монстроидальный и просто не влезал в контроллер. Необходимые математические алгоритмы вообще не получалось выполнять в реальном времени, при этом на ASM они летали. В общем я изначально и занимался тем, что переписывал код на ASM после того, как сишники сдавались. Потом переключился на pic18, но остался на ASM. В MPLAB очень мощный макроассемблер, позволяющий делать чудеса. В конечном итоге я сделал библиотеку макросов, которая позволяла писать на си-подобном языке. Библиотека была задокументирована и все конструкции покрывались тестами. Это очень сильно упростило разработку. Ниже описание некоторых конструкций. Но это лишь малая часть, вся жесть в деталях, особенно в описании типов данных и условий. Мой Вам совет - если работаете с 8-битными PIC, держитесь подальше от Си. Spoiler ; ############################################################################## ; # # ; # Switch structure example is shown below. # ; # Switch structure is based on a jump table. Its maximum size is limited to # ; # 128 entries if NEAR jump type is used or 64 entries if FAR jump type is # ; # used. # ; # SWITCH and SWITCH_END are mandatory macroses that are used to open and # ; # close switch section. SWITCH accepts two mandatory parameters - jump table # ; # size and jump type. Nested switches are allowed. # ; # CASE, DEFAULT and BREAK macroses open and close code section for the # ; # particular or default case. BREAK macros could be omitted, but it is not # ; # recommended. CASE macros accepts one mandatory parameter - case identifier # ; # (index) which must not exceed jump table size - 1. DEFAULT macros could be # ; # omitted but it is also not recommended. # ; # # ; # SWITCH 32, NEAR # ; # CASE 0x00 # ; # ; load accumulator here # ; # SWITCH 7, NEAR # ; # CASE 0x00 # ; # ; code section # ; # BREAK # ; # CASE 0x04 # ; # ; code section # ; # BREAK # ; # DEFAULT <-- optional, but recommended # ; # ; code section # ; # BREAK # ; # SWITCH_END # ; # BREAK # ; # CASE 0x05 # ; # ; code section # ; # BREAK # ; # CASE 0x31 # ; # ; code section # ; # BREAK # ; # DEFAULT <-- optional, but recommended # ; # ; code section # ; # BREAK # ; # SWITCH_END # ; # # ; ############################################################################## ; ############################################################################## ; # # ; # Condition structure example is shown below. # ; # COND and COND_END are mandatory macroses that are used to open and close # ; # condition section. COND accepts two mandatory parameters - AND or OR for # ; # condition type and NEAR or FAR for jump type. Condition type specifies the # ; # operation to be performed within conditional statements. Nested conditions # ; # are allowed. # ; # COND_TRUE and COND_FALSE macroses are optional and used to start true or # ; # false code section respectively. To decrease code size COND_TRUE section # ; # must precede COND_FALSE section for AND condition type and COND_FALSE # ; # section must precede COND_TRUE section for OR condition type. # ; # # ; # Conditions must be defined as follows: # ; # # ; # CONDITION_NAME macro [macro parameters if necessary] # ; # local _tid = TID(NODE_TYPE_COND, .0) # ; # if (OR == CONDTYPE) # ; # ; condition check, jump if true ---------+ # ; # if (NEAR == CONDJUMPTYPE) <----------+ # ; # bra COND_TRUE_LABEL <-- near jump (less code size) # ; # else ; (FAR == CONDJUMPTYPE) # ; # goto COND_TRUE_LABEL <-- far jump (large ranges) # ; # endif # ; # else # ; # if (AND == CONDTYPE) # ; # ; condition check, jump if false ----+ # ; # if (NEAR == CONDJUMPTYPE) <----------+ # ; # bra COND_FALSE_LABEL <-- near jump (less code size) # ; # else ; (FAR == CONDJUMPTYPE) # ; # goto COND_FALSE_LABEL <-- far jump (large ranges) # ; # endif # ; # endif # ; # endif # ; # endm # ; # # ; # COND AND, NEAR # ; # COND OR, NEAR # ; # COND AND, NEAR # ; # CONDITION_1 # ; # CONDITION_2 # ; # CONDITION_3 # ; # COND_FALSE <-- optional (OR: recommended to # ; # ; code section put COND_FALSE first) # ; # COND_TRUE <-- optional # ; # ; code section # ; # COND_END # ; # CONDITION_4 # ; # CONDITION_5 # ; # COND_TRUE <-- optional (AND: recommended to # ; # ; code section put COND_TRUE first) # ; # COND_FALSE <-- optional # ; # ; code section # ; # COND_END # ; # COND_END # ; # # ; ############################################################################## ; ############################################################################## ; # # ; # Conditional if structure example is shown below. # ; # IFC and IFC_END are mandatory macroses that are used to open and close # ; # conditional if section. IFC accepts one mandatory parameter - NEAR or FAR # ; # for jump type. Nested conditional ifs are allowed. # ; # ELSEIFC and ELSEC macroses are optional and used to start ELSEIF or ELSE # ; # code section respectively. # ; # # ; # IFC NEAR # ; # COND AND, NEAR # ; # CONDITION_1 # ; # CONDITION_2 # ; # CONDITION_3 # ; # COND_TRUE <-- optional # ; # ; code section # ; # COND_FALSE <-- optional # ; # ; code section # ; # COND_END # ; # ELSEIFC <-- optional # ; # CONDITION_4 # ; # CONDITION_5 # ; # ELSEC <-- optional # ; # ; code section # ; # IFC_END # ; # # ; ############################################################################## ; ############################################################################## ; # # ; # Conditional while structure example is shown below. # ; # WHILEC and WHILEC_END are mandatory macroses that are used to open and # ; # close conditional while section. WHILEC accepts one mandatory parameter - # ; # NEAR or FAR for jump type. Nested conditional whiles are allowed. # ; # # ; # WHILEC NEAR # ; # COND AND, NEAR # ; # CONDITION_1 # ; # CONDITION_2 # ; # CONDITION_3 # ; # COND_TRUE <-- optional # ; # ; code section # ; # COND_FALSE <-- optional # ; # ; code section # ; # COND_END # ; # CONDITION_4 # ; # CONDITION_5 # ; # ; while code section # ; # WHILEC_END # ; # # ; ############################################################################## Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 28 ноября, 2019 Опубликовано 28 ноября, 2019 · Жалоба 4 hours ago, jeka said: dgram_ptr++; - инструкцию incf компилятор не знает? Просто интересно - скомпилируйте ++ dgram_ptr; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jeka 0 28 ноября, 2019 Опубликовано 28 ноября, 2019 · Жалоба Just now, GenaSPB said: Просто интересно - скомпилируйте то же самое... Похоже взят готовый компилятор, который делает промежуточный код, который потом транслируется в асм. И этот промежуточный код явно не оптимален для системы команд пика. Явно видно, что он подразумевает один (возможно несколько) регистров, которые через доступы к памяти приходится использовать. Доступ по индексу тоже никто не оптимизировал - один и тот же индекс просчитывается каждый раз, даже если это один и тот же индекс. Вообщем порно. 2 hours ago, andrey_p said: В MPLAB очень мощный макроассемблер, позволяющий делать чудеса. Это здорово, но я вряд ли буду на пиках часто что-то делать, особенно сложные вещи. Тратить время на изучение не вижу смысла. К тому же держать в голове много систем команд, когда каждая со своими приколами сложно - в голове в кашу превращается всё когда и x86, и arm , и msp и pic еще... Хотя на пиках я давно программировал на асме, довольно много. Но уже подзабыл, а вспоминать не очень хочется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба 7 hours ago, jeka said: выполнять код на токе 1мка Эквивалентный по функциональности? Я ведь с пиков начинал в далёких 2000-х... Могу что=то позабыть, конечно, но не верится, что это так... 6 hours ago, andrey_p said: держитесь подальше от Си. Тогда уж, "держитесь подальше от pic"))) 4 hours ago, jeka said: программировал на асме, довольно много. Кстати, почему такая уважаемая фирма IAR не делает компилятора для пика? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jeka 0 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба 4 minutes ago, haker_fox said: Эквивалентный по функциональности? зачем? обычно я использую их для управления питанием, мониторинга батарей, не более. Если разряженный девайс с li-ion кто-то бросил надолго чтоб не убить батарею приходится микроамперы считать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба 2 minutes ago, jeka said: батарею приходится микроамперы считать. Ладно, понятно) Я с такими токами не работал, поэтому у меня никаких аргументов нет) Хотя и принимал участие в разработке зарядного устройства для lipo в составе прибора. Мы там ATmega32HVB применяли, она специально для зарядников ориентирована. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба 2 часа назад, jeka сказал: зачем? обычно я использую их для управления питанием, мониторинга батарей, не более. Если разряженный девайс с li-ion кто-то бросил надолго чтоб не убить батарею приходится микроамперы считать. Ну так делайте как все: Основную часть кода (не требовательную к потреблению) напишите на си, а критически важные по потреблению участки - асм-вставками (inline asm или в отдельных файлах). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба 14 часов назад, jeka сказал: - оптимизатор C - без комментариев. LATAbits.LATA4^=1 - просто под стол уполз... dgram_ptr++; - инструкцию incf компилятор не знает? Вообщем я в раздумьях. стоит ли с пиками дальше связываться... иар поддержку пиков давно убрал, альтернатив мплабу особо не вижу... На асме писать ну очень не хочется. Если это тот же компилятор, о котором я читал вот здесь (старая статья, живьём не нашёл), то это происки микрочипа. Они специально ухудшают результаты компиляции в бесплатной версии, чтобы побудить покупать Pro версию - вставляют бессмысленные инструкции, переходы, и проч. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба 31 minutes ago, AHTOXA said: Они специально ухудшают результаты компиляции в бесплатной версии, чтобы побудить покупать Pro версию - вставляют бессмысленные инструкции, переходы, и проч. Это же преступление против честных российских инженеров! Расстрелять! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться