Mikla (27.11.2013 21:29, просмотров: 2777) VL
keil 4.53 vs keil 4.72a перешел с одного на другой, в итоге попал и придется откатываться назад.
Вот пример две строчки кода
unsigned char *from;//указатель на входящее сообщение
unsigned long data;
...
data = *(unsigned long*)from;
from += 4;
...
старый компилит как
LDR R11,[R4],#0x04 при оптимизации O3
новый
LDM R4!,{R0} при оптимизации с O1 по O3
без оптимизации O0 использует LDR/STR, но использовать его без оптимизации, когда код в 1,5 раза больше смылса нет.
на галочку Split load and store multiple реагирует варнингом типа splitting LDM/STM has no benefits и все оставляет как есть.
поскольку longи во входящем сообщении лежат как угодно и не выравнены на границу в 4 байта, в новом кейле получаем hard fault.
Просматривать, выискивать и исправлять под новый компилятор тучу исходников нет никакого желания.
из новой среды в старую передрал поддержку новых stmов, обновил прошивку Ulink.
Если у кого есть лицензионный keil с еще не истекшим сроком поддержки, может спросите у русской поддержки (Сергей Копытин) что за нафиг?