int main (int argc, char* argv[]) { // constexpr Gpio led(Port::A,7); // led.init(GpioMode::Out,GpioOutType::PP,GpioSpeed::s100MHz,GpioPuPd::PullDown); while (1) { // led.toggle(); } } arm-none-eabi-size —format=berkeley "6.elf" text data bss dec hex filename 5357 160 740 6257 1871 6.elf Finished building: 6.siz int main (int argc, char* argv[]) { constexpr Gpio led(Port::A,7); led.init(GpioMode::Out,GpioOutType::PP,GpioSpeed::s100MHz,GpioPuPd::PullDown); while (1) { led.toggle(); } } Invoking: Cross ARM GNU Print Size arm-none-eabi-size —format=berkeley "6.elf" text data bss dec hex filename 5421 160 740 6321 18b1 6.elf Finished building: 6.siz
Комментарии: 40
Dmitry
А я вижу 64
Kirill
64, мой проеб) я 21 -57 считал))
Anonim
я думал ты тупо число строк в листинге сосчитал это че text data bss dec hex filename 5421 160 740 6321 18b1 6.elf это еще всякие стартапы и либси?
Kirill
text это код, дата это оперативка, bss это заранее проинициализированные данные которые в стартапе копируется из флеша в оперативку, dec это занятый размер флеша, hex это его представление в хексе да там, всего напихано я по этому только по разнице и смотрел
Anonim
ага, понял, получилось 64 ага, по листинку тоже так, я на 4 байта ошибся
Kirill
нахера кстате там ноп вконце?) я вот не понял)
Anonim
вот это? 00000a98: bne.n 0xa84
Kirill
если собираешь пустой мейн, ловишь вот это 00000a5c: b.n 0xa5c
00000a5e: nop
Kostya
Может программа должна что-то сделать обязательно?)
Anonim
нет, есть же барьеры
Kirill
и после того листинга что я привел там так 00000a92: ite eq 00000a94: streq r1, [r3, #24] 00000a96: str r2, [r3, #24] 00000a98: bne.n 0xa84
00000a9a: nop
00000a9c: andmi r3, r2, r0, lsl #16
00000aa0: andmi r0, r2, r0 но до нопа мы никогда не добераемся
Anonim
а конвейер его префетчит
Kostya
NOPs serve several purposes: They allow the debugger to place a breakpoint on a line even if it is combined with others in the generated code.It allows the loader to patch a jump with a different-sized target offset.It allows a block of code to be aligned at a particular boundary, which can be good for caching.It allows for incremental linking to overwrite chunks of code with a call to a new section without having to worry about the overall function changing size.
Anonim
bne это же бранч по условию
Kirill
но там всегда 1 там while (1) стоит)
Anonim
а, ну вот, номпами выравнивает чтоль?
Kostya
Я хз, так на стековерфлоу Либо для дебага
Anonim
ну пади 16 разрядов и у bne.n 16 что бы закэшировать нормально ставит nop к bne.n наверное )
Kostya
Вот казалось бы, что сложного на асме код писать А ведь столько нюансов знать надо Особенностей машины В этом плане мне нравится пик
Anonim
иногда проще на сях накатать и выдернуть листинг и себе вставить)
Kostya
Там всего то инструкций 30
Anonim
нет 112 чтоль
Kostya
Опкодов да
Anonim
pic17 точно
Kirill
в thumb2 можно даже не пытаться лезть имхо, слишком современные контроллеры разрослись инструкциями) но меня приколо наличие инструкций которые выполняются за 0 тактов
Anonim
в смысле? опкод это и есть инструкция, или ты о чем? форвардинг ?
Kirill
ща скину, там условный переход был и еще что то
Kirill
во, нашел наконец то) http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/CHDDIGAC.html там An IT instruction can be folded onto a preceding 16-bit Thumb instruction, enabling execution in zero cycles. и The number of cycles required to perform the barrier operation. For DSB and DMB, the minimum number of cycles is zero. For ISB, the minimum number of cycles is equivalent to the number required for a pipeline refill.
Kostya
Машинные инструкции 4 вроде Но для программиста считай одна Легко запомнить
Anonim
это барьеры, я о них выше писал. это короче ты дожидаешься когда pipeline flush сделает, т.е. все инструкции выполнятся, тогда можно исполнять инструкции ниже за DMB or DSB. прикольная штука, если нужно что то куда то перемапить. я лично буквально сегодня это заюзал
Kirill
барьеры, да, я тоже юзал, но через std::atomic, мы общались по этому поводу вроде)
Anonim
нет, там любая инструкция выполняется за 4 клока. некоторые за 8, типа goto call, lcall tblwr не, не со мной. а ты где их применял?
Kirill
самодельный семафор для многозадачной системы, чтобы не из перывания, не из другого потока, ниоткуда нельзя было поменять этот семафор либа должна была быть отдельна от фриртоса, по этому фриртоса семафор не подходил
Anonim
хм, что-то припоминаю. а видоса с тобой небыло, где ты все это рассказывал?
Kirill
был по плюсам и по прерываниям. конретно про системы синхронизации не было ничего я кстате 26 еду в мск на встречу может там и пересечемся
Anonim
да, там по прерываниям было, мне понравилось, энергично и доступно объясняешь) да, не проспать бы, я отпуск спецом отсрочил за 26-е)
Kirill
я там чуть в штаны не обосрался от страха) может от этого и енергично))
Anonim
даже вида не подал если честно) да, ок вышло)) нужно больше практики) я вот не лучше расскажу, хотя на работе все ок, но перед незнакомыми людьми барьер чувствую
Anonim
http://vak.ru/doku.php/proj/pic/pic17-opcodes
Kostya
Я имел в виду отличных На асме куча повторяется В зависимости от операндов