Страница 5 из 40
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 02:43:26
nahimovv
BOB51 писал(а):"16 Кб FLASH"
Задача: Сделать восьмиразрядный семисегментник с динамической индикацией на двух 74HC595 по SPI. Вывести на дисплей "76543210".
STM32F05X, Кейл.
Program Size: Code=696 RO-data=224 RW-data=16 ZI-data=1024
Пустой проект:
Program Size: Code=344 RO-data=208 RW-data= 0 ZI-data=1024
Разница:
Program Size: Code=352 RO-data= 16 RW-data=16 ZI-data= 0
Итого понадобилось: 369 байт ROM и 16 байт RAM на всё про всё.
Если добавить ещё 74HC595 и замутить "бегущую строку" на матрицах 8Х8, то текст проги не изменится, а расходы ROM и RAM уйдут только на таблицы символов и увеличение выходного буфера.
Представьте данные по аналогичному коду под АВР, ждём с нетерпением!
a5021 писал(а):При всех достоинствах АРМов, у них есть и неприметный на первый взгляд недостаток, непосредственно вытекающий из достоинств, -- требуют много писанины. Если проект не нуждается в соответствующих наворотах, то быстрее будет его реализовать именно на мелком МК.
140 строк текста на СИ, включая пустые строки для улучшения читаемости, без применения SPL.
SIM31 писал(а):Более скоростные ARM, будут хороши в обработке видеосигналов, но ногами дрыгать, в мощном блоке питания, будут намного хуже.
Та ну? С чего такие выводы?
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 09:25:55
menzoda
SIM31 писал(а):В остальном ARM сложнее PIC. Там только заголовок программы с инициализацией оборудования больше, чем многие программы на PIC, неужели это не очевидно?

Для инициализации МК на ARM необходим небольшой стартап файл, все остальное опционально. У пиков это скрыто от пользователя за какими-нибудь конфигурационными битами, автоматически генерируемым кодом и т.п. Хватит уже путать часто бестолковые и ненужные "удобности" и простоту архитектуры. Архитектура везде одинаковая, плюс-минус несколько команд не делают ее сложнее.
Спойлер
Код: Выделить всё
; -----------------------------------------------------------------------------
; Выделение области памяти под стек.
; -----------------------------------------------------------------------------
UND_STACK_SIZE EQU 0x00000000
SVC_STACK_SIZE EQU 0x00000008
ABT_STACK_SIZE EQU 0x00000000
FIQ_STACK_SIZE EQU 0x00000000
IRQ_STACK_SIZE EQU 0x00000080
USR_STACK_SIZE EQU 0x00000200
ISR_STACK_SIZE EQU (UND_STACK_SIZE + SVC_STACK_SIZE + ABT_STACK_SIZE + FIQ_STACK_SIZE + IRQ_STACK_SIZE)
AREA STACK, NOINIT, READWRITE, ALIGN=3
stack_limit SPACE USR_STACK_SIZE + ISR_STACK_SIZE
stack_base
; -----------------------------------------------------------------------------
; Выделение области памяти под кучу.
; -----------------------------------------------------------------------------
HEAP_SIZE EQU 0x00000000
AREA HEAP, NOINIT, READWRITE, ALIGN=3
heap_base SPACE HEAP_SIZE
heap_limit
; -----------------------------------------------------------------------------
; Таблица векторов прерываний.
; -----------------------------------------------------------------------------
PRESERVE8
AREA RESET, CODE, READONLY
ARM
vectors_mem LDR PC, rst_addr
LDR PC, und_addr
LDR PC, swi_addr
LDR PC, pab_addr
LDR PC, dab_addr
NOP
LDR PC, [PC, #-0x0FF0]
LDR PC, fiq_addr
rst_addr DCD rst_handler
und_addr DCD und_handler
swi_addr DCD swi_handler
pab_addr DCD pab_handler
dab_addr DCD dab_handler
DCD 0
irq_addr DCD irq_handler
fiq_addr DCD fiq_handler
; -----------------------------------------------------------------------------
; Обработчики прерываний по умолчанию.
; -----------------------------------------------------------------------------
und_handler B und_handler
swi_handler B swi_handler
pab_handler B pab_handler
dab_handler B dab_handler
irq_handler B irq_handler
fiq_handler B fiq_handler
; -----------------------------------------------------------------------------
; Обработчик прерывания reset.
; -----------------------------------------------------------------------------
MODE_USR EQU 0x10
MODE_FIQ EQU 0x11
MODE_IRQ EQU 0x12
MODE_SVC EQU 0x13
MODE_ABT EQU 0x17
MODE_UND EQU 0x1B
MODE_SYS EQU 0x1F
I_BIT EQU 0x80
F_BIT EQU 0x40
AREA |.text|, CODE, READONLY
EXPORT rst_handler
IMPORT __main
rst_handler
LDR R0, =stack_base
MSR CPSR_c, #MODE_UND:OR:I_BIT:OR:F_BIT
MOV SP, R0
SUB R0, R0, #UND_STACK_SIZE
MSR CPSR_c, #MODE_ABT:OR:I_BIT:OR:F_BIT
MOV SP, R0
SUB R0, R0, #ABT_STACK_SIZE
MSR CPSR_c, #MODE_FIQ:OR:I_BIT:OR:F_BIT
MOV SP, R0
SUB R0, R0, #FIQ_STACK_SIZE
MSR CPSR_c, #MODE_IRQ:OR:I_BIT:OR:F_BIT
MOV SP, R0
SUB R0, R0, #IRQ_STACK_SIZE
MSR CPSR_c, #MODE_SVC:OR:I_BIT:OR:F_BIT
MOV SP, R0
SUB R0, R0, #SVC_STACK_SIZE
MSR CPSR_c, #MODE_USR
MOV SP, R0
SUB SL, SP, #USR_STACK_SIZE
LDR R0, =__main
BX R0
; -----------------------------------------------------------------------------
; Инициализация стека и кучи.
; -----------------------------------------------------------------------------
AREA |.text|, CODE, READONLY
EXPORT __user_setup_stackheap
IMPORT __use_two_region_memory
__user_setup_stackheap
LDR R0, =heap_base
LDR R1, =stack_base
LDR R2, =heap_limit
LDR R3, =stack_limit
BX LR
END
Это для ARM7TDMI. Все прямолинейно и прозрачно. Если задаться целью ужать, то можно его сделать совсем маленьким. Если из-за этого вы считаете АРМ дико сложным, то даже не знаю что сказать...
Начиная от MCS51, без всякой периферии, пошло усложнение по нарастающей, больше оборудования, больше таймеров, DMA, отдельное такитирование флэша, памяти, портов, АЦП, ЦАП, больше особенностей.
Тут опять путается понятие ядра и периферии. Не нравится когда много всего понавешано? Возьмите более простой контроллер на АРМ, хотя какого черта? Просто не используйте эту периферию и все! Ядро то здесь причем?
SIM31 писал(а):На обычных компах, компиляторы обычно даже под 1 бит сразу выделяют 32-64 бита, так процессору быстрее обрабатывать поток данных, особенно конвееру.
Да никто не выделяет под байт данных целое слово и никогда не выделял. Может только в каких-нибудь экзотических ситуациях.
SIM31 писал(а):Почему STM32 так себя ограничил
Опять путается семейство микроконтроллеров и ядро. STM просто лицензировал архитектуру у ARM и нашлепал микроконтроллеров со своей периферией. STM != ARM.
SIM31 писал(а):Если STM32 аппаратно обрабатывает 8-битные переменные, обращается к любому байту памяти, разработчики молодцы, всё продумали, кто же против?
Не знаю о чем ты тут, но все процессорные регистры у ARM в STM32 32-битные. При этом инструкции чтения/записи из/в память могут работать с байтами, полусловами, словами и двойными словами.
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 09:33:52
dosikus
menzoda писал(а):SIM31 писал(а):
Не знаю о чем ты тут,
Да он ,я так понял, запал на 32бит .

Думает восьмибитные переменные будут каждая занимать в флэше 32бита .
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 10:57:25
Pika4u
sajkel писал(а):menzoda Спасибо за ответ.
Попробую конкретизировать свой вопрос.
1. Вы изучали программирование перед тем как заняться мк (я не говорю о школьном курсе)?
2. Вы пишете на си?
3. Вы можете написать с нуля программу скажем для простенького осциллографа с lcd дисплеем?
4. Были ли возле вас знакомые которые в этом хорошо разбирались и у которых можно было проконсультироваться?
5. Что вы использовали для того чтобы освоить мк?
6. Знали ли вы английский когда начинали?
7. Сколько вы этим занимаетесь?
1.Естественно. До МК я 2 писал программы на Си для компа.
2.Да
3.А зачем? Выйдет кака, эти осциллографы на том же ebay стоят копейки.
4.Неа, был google.ru и даташиты.
5.Паяльник, руки и голову
6.Неа. Благодаря даташитам английский немного подтянул даже
7. В районе 2 лет.
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 12:47:46
a5021
nahimovv писал(а):140 строк текста на СИ, включая пустые строки для улучшения читаемости, без применения SPL.
Представьте данные по аналогичному коду под АВР, ждём с нетерпением!
Вот код ардуины для динамической индикации. 4 знака. 60 строк кода, половина из которых дефайны для читабельности. "Binary sketch size: 822 bytes"
Спойлер
Код: Выделить всё
#define DIGIT_1 (1 << PORTC3)
#define DIGIT_2 (1 << PORTC2)
#define DIGIT_3 (1 << PORTB1)
#define DIGIT_4 (1 << PORTB0)
#define SEG_A (1<<6)
#define SEG_B (1<<5)
#define SEG_C (1<<0)
#define SEG_D (1<<3)
#define SEG_E (1<<4)
#define SEG_F (1<<7)
#define SEG_G (1<<1)
#define SEG_DP (1<<2)
#define SIGN_BLANK 0
#define SIGN_8 0xFF - SEG_DP
#define SIGN_0 SIGN_8 - SEG_G
#define SIGN_1 SEG_B + SEG_C
#define SIGN_2 SIGN_8 - SEG_F - SEG_C
#define SIGN_3 SIGN_8 - SEG_F - SEG_E
#define SIGN_4 SIGN_1 + SEG_G + SEG_F
#define SIGN_6 SIGN_8 - SEG_B
#define SIGN_5 SIGN_6 - SEG_E
#define SIGN_7 SIGN_1 + SEG_A
#define SIGN_9 SIGN_8 - SEG_E
unsigned char codes[] = {SIGN_0, SIGN_1, SIGN_2, SIGN_3, SIGN_4, SIGN_5, SIGN_6, SIGN_7, SIGN_8, SIGN_9};
volatile unsigned char dispBuf[] = {SIGN_BLANK, SIGN_BLANK, SIGN_BLANK, SIGN_BLANK}, bufIndex = 0;
void setup() {
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (1<<DDC3) | (1<<DDC2) | (0<<DDC1) | (0<<DDC0);
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (1<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0);
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
TCCR2B=(1<<CS22) | (1<<CS20);
TIMSK2=(1<<TOIE2);
}
void loop() {
while(1);
}
ISR(TIMER2_OVF_vect) {
PORTB &= ~(DIGIT_3 | DIGIT_4);
PORTC &= ~(DIGIT_1 | DIGIT_2);
if (++bufIndex == 4) bufIndex = 0;
PORTD = dispBuf[bufIndex];
switch (bufIndex) {
case 0: PORTC |= DIGIT_1;
break;
case 1: PORTC |= DIGIT_2;
break;
case 2: PORTB |= DIGIT_3;
break;
case 3: PORTB |= DIGIT_4;
break;
}
}
И хотя это не точное сравнение, грамотный человек должен все понять.
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 13:29:56
oleg110592
у ардуины еще 2 KB бутлоадер, а в коде не заметил ничего ардуинового - должно и винавре работать. Попробуйте настроить порты таймер как положено праведному ардуинщику - типа pinMode(13, OUTPUT);.

Индикатор не 8 а 4 разряда, нет вывода цифр - итого можно сравнить:
СТМ32: 369 байт ROM и 16 байт RAM на всё про всё
АВР: "Binary sketch size: 822 bytes"
вывод: Cortex M0 код плотнее как минимум в 2 раза в сравнении с AVR
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 14:04:26
a5021
oleg110592 писал(а):у ардуины еще 2 KB бутлоадер, а в коде не заметил ничего ардуинового - должно и винавре работать. Попробуйте настроить порты таймер как положено праведному ардуинщику - типа pinMode(13, OUTPUT);.

У нас сравнение переросло в конкурсный отбор на поступление в кружок юного ардуинщика? Я пишу, как мне проще и быстрее, а не во имя соблюдения святого канона. Ардуина тем и хорош, что позволяет очень многое и позволяет делать это быстро. Для обкатки алгоритмов -- милейшая вещь, даже если код потом будет работать вообще на другом МК.
Индикатор не 8 а 4 разряда, нет вывода цифр
Не серьезно. Четыре дополнительных разряда это это еще четыре селектора в теле свитче. Вывод цифр -- операции присвоения соответствующих разрядов буфера. Десять строк, максимум. Давайте дефайны уберу, строк в пятьдесят уложится все, вместе с тем, что вы еще там придумаете.
вывод: Cortex M0 код плотнее как минимум в 2 раза в сравнении с AVR
Вывод: вы делаете скороспелые выводы, не совсем даже понимая, что с чем сравниваете.
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 14:47:23
oleg110592
У нас сравнение переросло...
Не у нас а у вас (с)

Понял - надо сравнивать количество строк кода.

Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 15:27:37
nahimovv
oleg110592 писал(а):Индикатор не 8 а 4 разряда, нет вывода цифр
Та ладно, нам не трудно! STM32F05X, Кейл, четыре разряда, вывод через порт.
Program Size: Code=536 RO-data=224 RW-data=16 ZI-data=1024
Пустой проект:
Program Size: Code=344 RO-data=208 RW-data= 0 ZI-data=1024
Разница:
Program Size: Code=192 RO-data= 16 RW-data=16 ZI-data= 0
Итого:
ROM - 208байт, RAM - 16байт
80 строк текста, из них всего 4 строчки майн.
При увеличении количества разрядов до восьми изменяются только дефайны и размер буфера.
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 15:39:45
oleg110592
эх по количеству строк stm32 все таки проиграл
вывод: людям с медленным умением набора кода на клавиатуре стм32 не стОит изучать
но никто и не сказал, что динамическую индикацию на стм32 можно сделать используя DMA, причем ядро может спокойно спать или выполнять какую другую полезную функцию
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 16:12:28
a5021
oleg110592 писал(а):Понял - надо сравнивать количество строк кода.
Да, именно так и именно об этом я говорил в самом начале. В части случаев, при реализации небольших проектов это будет преимуществом маленьких МК перед большими. Попытка представить АРМы в мелких корпусах, как "эквивалент восьмибиток, только лучше", не совсем корректна.
но никто и не сказал, что динамическую индикацию на стм32 можно сделать используя DMA
Можно, наверное еще и "за вискИ", только "никто и не сказал", что это проще и быстрее.
Чтобы крутить винты и шурупы у меня имеются отвертка и шуруповерт. Что же лучше? Если надо отвернуть пару винтов в корпусе, я возьму отвертку, т.к. она всегда под рукой и я сделаю дело быстрее, чем вытащу шуруповерт из ящика инструментов. Если надо собрать шкаф, то я полезу за шуруповертом в ящик, а потом вгоню сотню шурупов туда, куда нужно, без малейшего напряга и быстрее, чем я бы это сделал отверткой. Мораль: преимуществами надо пользоваться там, где они дают выигрыш, а не загоняться до посинения, доказывая, что везде надо использовать шуруповерт, т.к. у него число оборотов выше.
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 16:26:52
oleg110592
а если представить так: отвертка это младшенькие (типа cortex m0), а шуруповерт это старшенькие армы и тогда радуга засияет всеми красками. Новичку поначалу придется освоить работу с отверткой, а потом останется легко приделать к ней движок, чтоб получился шуруповерт.
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 16:27:24
nahimovv
a5021 писал(а):
В части случаев, при реализации небольших проектов это будет преимуществом маленьких МК перед большими.
Не будет! Для маленьких МК важнее плотность кода, а не количество строк. И здесь маленькие STM в выигрыше перед АВР.
Попытка представить АРМы в мелких корпусах, как "эквивалент восьмибиток, только лучше", не совсем корректна.
Это не попытка, это факт!
но никто и не сказал, что динамическую индикацию на стм32 можно сделать используя DMA
На 20 строчек больше это и есть настройка TIM и DMA.
Мораль: преимуществами надо пользоваться там, где они дают выигрыш, а не загоняться до посинения, доказывая, что везде надо использовать шуруповерт, т.к. у него число оборотов выше.
Выигрыш от юзания АРМ, даже мелких, очевидна, с этим просто нужно смириться.
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 16:54:47
oleg110592
опять холивар, один классик юмора хорошо сказал:
Давайте спорить о вкусе устриц и кокосовых орехов с теми, кто их ел, до хрипоты, до драки, воспринимая вкус еды на слух, цвет на зуб, вонь на глаз, представляя себе фильм по названию, живопись по фамилии, страну по "Клубу кинопутешествий", остроту мнений по хрестоматии.
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 17:10:54
nahimovv
oleg110592 писал(а):опять холивар
И в мыслях не было! Оба примера с рабочих проектов, работают в железе, а дальше каждый пусть решает сам.
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 17:20:25
oleg110592
да я о том что опять бессмысленный (который раз уже) спор о вкусе между людьми, которые пробовали устриц и которые не.
Сам я уже откусил кусочек - понравилось. 5 февраля приедут заказанные платки с STM32F429 (нужен вывод на телевизор) - придется давиться сразу большим куском.
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 17:37:53
a5021
nahimovv писал(а):Для маленьких МК важнее плотность кода, а не количество строк.
Это кому важнее? С точки зрения простоты и скорости разработки, плотность кода это вообще отфонарная характеристика. Ценители пусть над плотностью кода трепещут, а мне надо сделать устройство быстро и просто. И от количества строк это зависит куда, как больше, чем от некой "плотности кода".
Это не попытка, это факт!
Ровно такой же факт, как утверждение, будто категоричность является одной из лучших человеческих добродетелей. Теперь уже проверенным фактом продолжает оставаться утверждение, что при прочих равных, писанины на армах требуется больше.
Выигрыш от юзания АРМ, даже мелких, очевидна, с этим просто нужно смириться.
Кому очевиден? Вам? Мне, как человеку имеющему дело и с тем и другим (и третьим), совсем не очевиден.
Оба примера с рабочих проектов, работают в железе, а дальше каждый пусть решает сам.
Мне решать помогает один и тот же, не завершенный пока еще проект, существующий в виде прототипов на трех платформах: AVR, STM8 и STM32. Чем дело закончится еще не знаю, но совершенно очевидно, что вкусом устриц вы лучше кого-нибудь другого стращайте.
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 18:04:19
nahimovv
a5021 писал(а):
Это кому важнее? С точки зрения простоты и скорости разработки, плотность кода это вообще отфонарная характеристика.
Пусть будет мне важнее! Видать понятие "простота и скорость разработки" у нас разная.
Ценители пусть над плотностью кода трепещут, а мне надо сделать устройство быстро и просто. И от количества строк это зависит куда, как больше, чем от некой "плотности кода".
От количества строк ничего не зависит, всё зависит от количества функционала или лёгкости осуществления задуманного. Пусть я скопипастю из прошлого проекта целую кучу строк, которые, в итоге, выльются в сотню байт кода и хардварную реализацию - я переживу, мне важен результат. А копипаст на трудодни не перекладывается.
Теперь уже проверенным фактом продолжает оставаться утверждение, что при прочих равных, писанины на армах требуется больше.
Или копипаста заранее написанного кода, пусть даже с коррективами?
Мне, как человеку имеющему дело и с тем и другим (и третьим), совсем не очевиден.
Не знаю даже что и сказать!
Мне решать помогает один и тот же, не завершенный пока еще проект, существующий в виде прототипов на трех платформах: AVR, STM8 и STM32. Чем дело закончится еще не знаю, но совершенно очевидно, что вкусом устриц вы лучше кого-нибудь другого стращайте.
Это где я про устрицы говорил? Куски кода с STM8 на STM32 и обратно таскаю свободно, без затруднений - у них периферия практически одинакова, одни и те же решения легко реализуются и там, и там. Абстрагируйтесь от АВР, займитесь изучением железа STM8/32 и всё получится.
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 18:21:06
oleg110592
...а мне надо сделать устройство быстро и просто. И от количества строк это зависит куда, как больше
тогда предложу делать устройства на PIC16F505:
Precision 4 MHz internal oscillator
Baseline Core with 33 Instructions, 2 Stack Levels
All single-cycle Instructions except for program branches which are two cycles
12-bit wide instructions
8-bit wide data path
25 mA source/sink current I/O
Low power (100nA) sleep current
One 8-bit timer (TMR0)
Watchdog timer (WDT)
In Circuit Serial Programming™ (ICSP™) capability
In-Circuit debugging support
Programmable code protection
один таймер, два порта, прерываний нет
настройка периферии максимум 5 строк - минимум писанины, только немножко дороже чем STM32F030
Re: Кто сам изучил програмирование мк?
Добавлено: Чт янв 23, 2014 20:42:50
mrFox
и с чего тут холивар AVR и STM32 - у обоих плотность кода примерно одинаковая
различие будет если использовать 32бит операции
да и компилятор не всегда генерит оптимальный код
правда если ножками дрыгать - у AVR 1 команда, у STM32 - 2
sajkel писал(а):
1. Вы изучали программирование перед тем как заняться мк (я не говорю о школьном курсе)?
2. Вы пишете на си?
3. Вы можете написать с нуля программу скажем для простенького осциллографа с lcd дисплеем?
4. Были ли возле вас знакомые которые в этом хорошо разбирались и у которых можно было проконсультироваться?
5. Что вы использовали для того чтобы освоить мк?
6. Знали ли вы английский когда начинали?
7. Сколько вы этим занимаетесь?
1. програмист Delphi + базы данных
2. только на С
3. написал для STM32 и для XMega
4. нет - все сам
5. sprint layout + datashit
6. да
7. более 10 лет