А если прерывание произойдет?oleg110592 писал(а):раз функция, два функция и все.
Мигать светодиодом. ARM или не-ARM?
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
- Реклама
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
- Сообщения: 191
- Зарегистрирован: Вт июн 05, 2018 00:18:01
PIC-и нынче вообще на любителя, т.к. си-пригодные альтернативы достаточно подешевели и стабилизировались.
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Опять китайское развитие
The ARM chip that wont cost an arm and a leg

SWM050 highlights:
– operates from 3.3v or 5V
– max 36Mhz using internal clock
– ARM Cortex-M0
– 8KB FLASH, 1KB SRAM
– 6/10 GPIO
– 2 32bit timers with PWM
– Watchdog timer
– (almost hobbyist) friendly tsop8 or tsop16 package
"It has not got very impressive peripherals, but when it comes to its price it is a killer".
"У этого нет очень впечатляющих периферийных устройств, но когда дело доходит до его цены, это убийца". (переводчик)
Есть плагин для JLINK JTAG Segger. Любитель сделал отладочную плату
Исходный код мигалки, файлы pcb и фото находятся на GitHub, ссылки тут:
http://smdprutser.nl/blog/the-arm-chip- ... and-a-leg/
код мигалки:
The ARM chip that wont cost an arm and a leg
SWM050 highlights:
– operates from 3.3v or 5V
– max 36Mhz using internal clock
– ARM Cortex-M0
– 8KB FLASH, 1KB SRAM
– 6/10 GPIO
– 2 32bit timers with PWM
– Watchdog timer
– (almost hobbyist) friendly tsop8 or tsop16 package
"It has not got very impressive peripherals, but when it comes to its price it is a killer".
"У этого нет очень впечатляющих периферийных устройств, но когда дело доходит до его цены, это убийца". (переводчик)
Есть плагин для JLINK JTAG Segger. Любитель сделал отладочную плату
Исходный код мигалки, файлы pcb и фото находятся на GitHub, ссылки тут:
http://smdprutser.nl/blog/the-arm-chip- ... and-a-leg/
код мигалки:
Код: Выделить всё
#include <SWM500.h>
void main(void)
{
PORT->PORTA_SEL.PA05=0; // normal operation
PORT->PORTA_PULLU.PA05=0; // no pullup
PORT->PORTA_INDIS.PA05=1; // port enabled(?)
GPIOA->DIR.DIR_5=1; // output
while(1)
{
GPIOA->DAT.DAT_5=1;
GPIOA->DAT.DAT_5=0;
}
}
в коде мигалки нет задержки - на 36 мегагерцах быстровато мигать будет 
Добавлено after 12 minutes 11 seconds:
а вот просветите меня, темного (и ленивого): вот, предположим, команда сложения - её опкод же в ARM тоже 32-битный? то есть в плане ассемблерного кода имеем удвоение объема (по сравнению с 16-битными опкодами тех же AVR) при идентичном алгоритме? или все не так?
Добавлено after 12 minutes 11 seconds:
а вот просветите меня, темного (и ленивого): вот, предположим, команда сложения - её опкод же в ARM тоже 32-битный? то есть в плане ассемблерного кода имеем удвоение объема (по сравнению с 16-битными опкодами тех же AVR) при идентичном алгоритме? или все не так?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
ARV, специально для любознательных, без оптимизаций ...
Код: Выделить всё
;;;45 if (TimeOut) {
000024 481f LDR r0,|L3.164|
000026 6800 LDR r0,[r0,#0] ; TimeOut
000028 2800 CMP r0,#0
00002a d004 BEQ |L3.54|
;;;46 TimeOut--;
00002c 481d LDR r0,|L3.164|
00002e 6800 LDR r0,[r0,#0] ; TimeOut
000030 1e40 SUBS r0,r0,#1
000032 491c LDR r1,|L3.164|
000034 6008 STR r0,[r1,#0] ; TimeOut
|L3.54|
;;;47 }
;;;48
;;;49 if ( cntdiskio++ >= 10 ) {
000036 481c LDR r0,|L3.168|
000038 7801 LDRB r1,[r0,#0] ; cntdiskio
00003a 7800 LDRB r0,[r0,#0] ; cntdiskio
00003c 1c40 ADDS r0,r0,#1
00003e 4a1a LDR r2,|L3.168|
000040 7010 STRB r0,[r2,#0]
000042 290a CMP r1,#0xa
000044 db29 BLT |L3.154|
;;;50 cntdiskio = 0;
000046 2000 MOVS r0,#0
000048 4611 MOV r1,r2
00004a 7008 STRB r0,[r1,#0]
;;;51
;;;52 if(TIM2->CNT>900)TIM2->CNT=0;
00004c 2001 MOVS r0,#1
00004e 0780 LSLS r0,r0,#30
000050 6a40 LDR r0,[r0,#0x24]
000052 21e1 MOVS r1,#0xe1
000054 0089 LSLS r1,r1,#2
000056 4288 CMP r0,r1
000058 d902 BLS |L3.96|
00005a 2000 MOVS r0,#0
00005c 0709 LSLS r1,r1,#28
00005e 6248 STR r0,[r1,#0x24]- Сообщения: 1743
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="dosikus",url="/forum/viewtopic.php?p=3466821#p3466821"]ARV, специально для любознательных, без оптимизаций ...[/uquote]
Понятно что без оптимизаций. Ведь с оптимизацией вероятность появления 4-байтовых команд сильно возрастает.
По крайней мере на M3/M4, за M0 не скажу.
Понятно что без оптимизаций. Ведь с оптимизацией вероятность появления 4-байтовых команд сильно возрастает.
По крайней мере на M3/M4, за M0 не скажу.
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
У меня есть один проект, который перетащили с ATMega128 на STM32F103. Немного, правда, добавив в функционале, иначе перетаскивать было не за чем. Но совсем немного, я бы оценил добавку в 10-15%. Привожу расход памяти с обоих проектов. Компилятор в обоих случаях IAR.
Код: Выделить всё
4 766 bytes of CODE memory (+ 8 range fill )
286 bytes of DATA memory (+ 41 absolute )
13 bytes of XDATA memory
Код: Выделить всё
7 732 bytes of readonly code memory
304 bytes of readonly data memory
1 456 bytes of readwrite data memory
благодарю за инфу. 16-битные команды - это теперь я понял.
даже любопытно, какое-такое "немного" дало увеличение в 10 раз потребности в RAM? или я чего-то не понял?VladislavS писал(а):Немного, правда, добавив в функционале
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 1743
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="ARV",url="/forum/viewtopic.php?p=3466804#p3466804"]в плане ассемблерного кода имеем удвоение объема (по сравнению с 16-битными опкодами тех же AVR) при идентичном алгоритме? или все не так?[/uquote]
Попробуйте скомпилить:
на любимом AVR и сравнить с объёмом кода на Cortex-M "при идентичном алгоритме"... 
Попробуйте скомпилить:
Код: Выделить всё
u32 Mul1(u32 x0, u32 x1)
{
u64 q = x0 * (u64)x1;
return (u32)(q >> 32) + ((u32)q >> 31);
}- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
[uquote="jcxz",url="/forum/viewtopic.php?p=3466826#p3466826"]Понятно что без оптимизаций. Ведь с оптимизацией вероятность появления 4-байтовых команд сильно возрастает.
[/uquote]
Ну зачем так сразу, у ARV снова батхерт случится.
То что код уменьшится и скорость возрастет ему по барабану...
Ну зачем так сразу, у ARV снова батхерт случится.
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="ARV",url="/forum/viewtopic.php?p=3466831#p3466831"]даже любопытно, какое-такое "немного" дало увеличение в 10 раз потребности в RAM? или я чего-то не понял?[/uquote]Исключительно настройки стека и кучи. В версии для ARM стек 1024 и куча 256 установлены. В AVR стек 160 без кучи.
я заметил, что за деревьями никто не желает видеть леса.jcxz писал(а):Попробуйте скомпилить
разумеется, речь шла только об опкодах "идентичных" команд. в AVR нет команд для работы с 32-битными операндами, и сравнивать корректно только команды байтной обработки данных, т.е. команд ассемблера, выполняющих идентичные алгоритмы вычислений. без примеси ЯВУ.
насколько я понял, код останется тем же по размеру, т.к. у AVR и ARM команды 16-битные. скорость возрастет только благодаря более высокой тактовой частоте - так? а работа с байтами может оказаться даже медленнее, т.к. байт - не нативный формат данных для ARM. все преимущества проявляются только при 32-битных данных, не так ли?dosikus писал(а):То что код уменьшится и скорость возрастет ему по барабану
интересно, делал ли кто-нибудь сравнение производительности ARM с теми же AVR при одинаковой частоте и работе с однобайтными данными? наверное, выигрыш только при умножении/делении...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="ARV",url="/forum/viewtopic.php?p=3466882#p3466882"]все преимущества проявляются только при 32-битных данных, не так ли?[/uquote]Не так. Все шины шире плюс кэши и другие архитектурные плюшки.
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="ARV",url="/forum/viewtopic.php?p=3466882#p3466882"]интересно, делал ли кто-нибудь сравнение производительности ARM с теми же AVR при одинаковой частоте и работе с однобайтными данными? наверное, выигрыш только при умножении/делении...[/uquote]
Есть у ARM всякие вставки битовых полей за такт или сдвиги за такт, хоть на 31 бит. И почему сравнивать нужно на однобайтных данных, AVR позиционируется как гибридный 8/16-bit AVR CPU, both 8- and 16-bit arithmetic is supported. Правда это уже про хмеги маркетологи стали так загонять, но набор инструкций там старый, так что долой устаревшие стереотипы, раскроем истинную мощь AVR сравнивая на 16-ти битных данных
Есть у ARM всякие вставки битовых полей за такт или сдвиги за такт, хоть на 31 бит. И почему сравнивать нужно на однобайтных данных, AVR позиционируется как гибридный 8/16-bit AVR CPU, both 8- and 16-bit arithmetic is supported. Правда это уже про хмеги маркетологи стали так загонять, но набор инструкций там старый, так что долой устаревшие стереотипы, раскроем истинную мощь AVR сравнивая на 16-ти битных данных
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
И почему частоту надо ограничивать? Если AVR не может больше 16-20 МГц работать, то это его проблемы. Таких искусственных ограничений можно напридумывать... Давай, например, на кварце 8 МГц сравним?
[uquote="VladislavS",url="/forum/viewtopic.php?p=3466901#p3466901"][uquote="ARV",url="/forum/viewtopic.php?p=3466882#p3466882"]все преимущества проявляются только при 32-битных данных, не так ли?[/uquote]Не так. Все шины шире плюс кэши и другие архитектурные плюшки.[/uquote]
если я буду делать uint8_t + uint8_t на ARM - это будет быстрее, чем на AVR при той же частоте? поможет кэш и прочие плюшки?
пересылка uint8_t из регистра в память и обратно быстрее будет?
например, обработка RGB-цвета делается по цветовым составляющим, т.е. побайтно. насколько я понимаю, невыровненные данные в ОЗУ имеют наихудшее время доступа в ARM, так? вы поправляйте меня, не стесняйтесь, я в ARMах не спец, могу нести ересь... тут будет выигрыш от 32-битных операций?
если я буду делать uint8_t + uint8_t на ARM - это будет быстрее, чем на AVR при той же частоте? поможет кэш и прочие плюшки?
пересылка uint8_t из регистра в память и обратно быстрее будет?
сравнение ради сравнения? или чтобы доказать, что слон сильнее моськи? не смешно самому-то?Reflector писал(а):раскроем истинную мощь AVR сравнивая на 16-ти битных данных
например, обработка RGB-цвета делается по цветовым составляющим, т.е. побайтно. насколько я понимаю, невыровненные данные в ОЗУ имеют наихудшее время доступа в ARM, так? вы поправляйте меня, не стесняйтесь, я в ARMах не спец, могу нести ересь... тут будет выигрыш от 32-битных операций?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="ARV",url="/forum/viewtopic.php?p=3466936#p3466936"]сравнение ради сравнения? или чтобы доказать, что слон сильнее моськи? не смешно самому-то?[/uquote]
Я не знаю, сам же первым предложил сравнивать AVR с донельзя урезанным ARM, хотя практической пользы от этого никакой нет. Для чего? Чтобы доказать, что моська не слабее слона хотя бы в таком случае?
Я не знаю, сам же первым предложил сравнивать AVR с донельзя урезанным ARM, хотя практической пользы от этого никакой нет. Для чего? Чтобы доказать, что моська не слабее слона хотя бы в таком случае?
Если доступ побайтный, то и выравнивать придется по границе байт, т.е. ничего выравнивать не нужно. Если тут именно по 3 байта данных цветов нужно загружать в 32-х битный регистр, то для 3-х из 4-х выборок будет производится два чтения, дальше уже нужно смотреть как эти данные будут обрабатываться.например, обработка RGB-цвета делается по цветовым составляющим, т.е. побайтно. насколько я понимаю, невыровненные данные в ОЗУ имеют наихудшее время доступа в ARM, так? вы поправляйте меня, не стесняйтесь, я в ARMах не спец, могу нести ересь... тут будет выигрыш от 32-битных операций?
Последний раз редактировалось Reflector Пт сен 28, 2018 11:30:59, всего редактировалось 1 раз.


