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-битные. При этом инструкции чтения/записи из/в память могут работать с байтами, полусловами, словами и двойными словами.