
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
Может программа должна что-то сделать обязательно?)

IDDQD
22.11.2016
19:48:00

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

Konstantins
22.11.2016
20:04:43
На асме куча повторяется
В зависимости от операндов

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

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

IDDQD
22.11.2016
20:10:02
tblwr

Admin
ERROR: S client not available

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

IDDQD
22.11.2016
20:13:19

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

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

IDDQD
22.11.2016
20:55:43

Konstantins
22.11.2016
20:56:38

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

IDDQD
22.11.2016
21:30:31

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 юсб-разъема, да впаяй свою зарядку в этот разрыв проводками