@ru_electronics

Страница 157 из 718
Kirill
22.11.2016
19:38:04
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

Dmitry
22.11.2016
19:38:54
А я вижу 64

Kirill
22.11.2016
19:39:30
64, мой проеб)

Google
Kirill
22.11.2016
19:40:01
я 21 -57 считал))

IDDQD
22.11.2016
19:40:41
я думал ты тупо число строк в листинге сосчитал

text data bss dec hex filename 5421 160 740 6321 18b1 6.elf

это еще всякие стартапы и либси?

Kirill
22.11.2016
19:42:41
text это код, дата это оперативка, bss это заранее проинициализированные данные которые в стартапе копируется из флеша в оперативку, dec это занятый размер флеша, hex это его представление в хексе

да там, всего напихано

я по этому только по разнице и смотрел

IDDQD
22.11.2016
19:43:39
ага, понял, получилось 64

ага, по листинку тоже так, я на 4 байта ошибся

Kirill
22.11.2016
19:45:39
нахера кстате там ноп вконце?)

я вот не понял)

IDDQD
22.11.2016
19:46:38
вот это? 00000a98: bne.n 0xa84 <main(int, char**)+40>

Google
Kirill
22.11.2016
19:46:51
если собираешь пустой мейн, ловишь вот это 00000a5c: b.n 0xa5c <main(int, char**)> 00000a5e: nop

Konstantins
22.11.2016
19:47:28
Может программа должна что-то сделать обязательно?)

Kirill
22.11.2016
19:48:18
и после того листинга что я привел там так 00000a92: ite eq 00000a94: streq r1, [r3, #24] 00000a96: str r2, [r3, #24] 00000a98: bne.n 0xa84 <main(int, char**)+40> 00000a9a: nop 00000a9c: andmi r3, r2, r0, lsl #16 00000aa0: andmi r0, r2, r0

но до нопа мы никогда не добераемся

IDDQD
22.11.2016
19:48:47
а конвейер его префетчит

Konstantins
22.11.2016
19:49:11
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.

IDDQD
22.11.2016
19:49:17
bne это же бранч по условию

Kirill
22.11.2016
19:49:35
но там всегда 1

там while (1) стоит)

IDDQD
22.11.2016
19:50:01
а, ну вот, номпами выравнивает чтоль?

Konstantins
22.11.2016
19:50:27
а, ну вот, номпами выравнивает чтоль?
Я хз, так на стековерфлоу

Либо для дебага

IDDQD
22.11.2016
19:51:02
ну пади 16 разрядов и у bne.n 16

что бы закэшировать нормально ставит nop к bne.n

наверное

)

Konstantins
22.11.2016
19:51:59
Вот казалось бы, что сложного на асме код писать

А ведь столько нюансов знать надо

Особенностей машины

Google
Konstantins
22.11.2016
19:56:42
В этом плане мне нравится пик

IDDQD
22.11.2016
19:56:47
иногда проще на сях накатать и выдернуть листинг и себе вставить)

Konstantins
22.11.2016
19:56:51
Там всего то инструкций 30

IDDQD
22.11.2016
19:57:01
нет

112 чтоль

Konstantins
22.11.2016
19:57:24
Опкодов да

IDDQD
22.11.2016
19:57:27
pic17 точно

Kirill
22.11.2016
19:57:40
в thumb2 можно даже не пытаться лезть имхо, слишком современные контроллеры разрослись инструкциями)

но меня приколо наличие инструкций которые выполняются за 0 тактов

IDDQD
22.11.2016
19:58:33
Опкодов да
в смысле? опкод это и есть инструкция, или ты о чем?

?

Kirill
22.11.2016
19:59:25
ща скину, там условный переход был и еще что то

IDDQD
22.11.2016
20:03:30
Там всего то инструкций 30
http://vak.ru/doku.php/proj/pic/pic17-opcodes

Konstantins
22.11.2016
20:04:43
http://vak.ru/doku.php/proj/pic/pic17-opcodes
Я имел в виду отличных

На асме куча повторяется

В зависимости от операндов

IDDQD
22.11.2016
20:05:41
Я имел в виду отличных
это и ест отличные

или что ты имеешь в виду?

Konstantins
22.11.2016
20:06:55
Взять хотя бы сложение

Google
Kirill
22.11.2016
20:07:03
форвардинг
во, нашел наконец то) 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.

Konstantins
22.11.2016
20:07:07
Машинные инструкции 4 вроде

Но для программиста считай одна

Легко запомнить

IDDQD
22.11.2016
20:09:20
во, нашел наконец то) 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.
это барьеры, я о них выше писал. это короче ты дожидаешься когда pipeline flush сделает, т.е. все инструкции выполнятся, тогда можно исполнять инструкции ниже за DMB or DSB. прикольная штука, если нужно что то куда то перемапить. я лично буквально сегодня это заюзал

Kirill
22.11.2016
20:10:00
барьеры, да, я тоже юзал, но через std::atomic, мы общались по этому поводу вроде)

IDDQD
22.11.2016
20:10:02
Машинные инструкции 4 вроде
нет, там любая инструкция выполняется за 4 клока. некоторые за 8, типа goto call, lcall

tblwr

Admin
ERROR: S client not available

Kirill
22.11.2016
20:11:25
самодельный семафор для многозадачной системы, чтобы не из перывания, не из другого потока, ниоткуда нельзя было поменять этот семафор

либа должна была быть отдельна от фриртоса, по этому фриртоса семафор не подходил

Kirill
22.11.2016
20:14:02
был по плюсам и по прерываниям. конретно про системы синхронизации не было ничего

я кстате 26 еду в мск на встречу

может там и пересечемся

IDDQD
22.11.2016
20:15:06
да, там по прерываниям было, мне понравилось, энергично и доступно объясняешь)

да, не проспать бы, я отпуск спецом отсрочил за 26-е)

Kirill
22.11.2016
20:15:29
я там чуть в штаны не обосрался от страха)

может от этого и енергично))

Google
IDDQD
22.11.2016
20:15:51
даже вида не подал если честно)

да, ок вышло)) нужно больше практики) я вот не лучше расскажу, хотя на работе все ок, но перед незнакомыми людьми барьер чувствую

Kirill
22.11.2016
20:31:37
Вот это был второй опыт)

Konstantins
22.11.2016
20:37:53
а про то, что реально запоминать нужно инструкций 30 :)

IDDQD
22.11.2016
20:41:41
а про то, что реально запоминать нужно инструкций 30 :)
а за всеми остальными в жаташит лезть типа?)

Konstantins
22.11.2016
20:47:58
а все остальные "образуются"

IDDQD
22.11.2016
20:55:43
а все остальные "образуются"
ну на это больше тактов уйдет, можно да, написать movfp WREG,REG1 вместо movwf REG1

Konstantins
22.11.2016
20:56:38
ну на это больше тактов уйдет, можно да, написать movfp WREG,REG1 вместо movwf REG1
да нет, просто ты знаешь, что есть инструкция с регистром и есть с аккумулятором

IDDQD
22.11.2016
20:56:39
ну и программно умножение херачить, вместо MULL

можно вместо bсf, bsf юзать RAM и маски

bcf PORTA,0 = movfp PORTA,tmp; movlw 0xFE; addwf tmp; movfp tmp,PORTA

во какая дичь получилась. выгода есть?) аж 12 тактов вникуда

Joric
22.11.2016
21:14:11
подскажите, чудовищные мозги, вот так можно подсоединять чаржер? или надо по-другому? хочется использовать usb только на MCU, а usb-разъем на чаржере не использовать. MCU работает от 5.0-3.2в без проблем. http://i.imgur.com/zZyfIVq.png

Joric
22.11.2016
21:31:06
IDDQD
22.11.2016
21:31:21
Joric
22.11.2016
21:31:35
ардуино

но не получилось

IDDQD
22.11.2016
21:32:12
а, чорт, соряныч

Подключение к зарядке через стандартный разъём microUSB или через дублирующие контакты + и — Аккумулятор подключается к контактам B+ и B- Нагрузка подключается к контактам OUT+ и OUT-

LexsZero
22.11.2016
21:33:10
порежь дорогу на ардуине от VCC юсб-разъема, да впаяй свою зарядку в этот разрыв проводками

Страница 157 из 718