переношу проект с 4.48, инициализации писаны на сях а всё остальное на асме, я в него просто из майна вваливался. Нифига короче не работает. Сократил асм до 4 строк, вывод в цап и на осцилограф. Исходный асм файл в 4.48 выглядит так:
NAME Dac
RSEG CODE
PUBLIC Dac
Dac
MOV R0,#-536870912
ORR R0,R0,#0x6C000
MOV R1,#+65280
STR R1,[R0, #+0]
BX LR ;; return
END
обьявляю в майне
void Dac(void);
вызываю в майне
int main()
{ Init();
while (1)
{Dac();
}
}
Все работает, после ресета на цапе выставляется значение.
Переношу это в чистом виде на 5.40, сразу же матерится на RSEG CODE, пишу как написано в техноте 17934
NAME Dac
PUBLIC Dac
SECTION `.text`:CODE
Dac
MOV R0,#-536870912
ORR R0,R0,#0x6C000
MOV R1,#+65280
STR R1,[R0, #+0]
BX LR ;; return
END
и нихера, молчит цап.
Проверяю вообще работает ли камень, вставляю в майн инлайн асм:
int main()
{ Init();
while (1)
{asm("MOV R0,#-536870912");
asm("ORR R0,R0,#0x6C000");
asm("MOV R1,#+65280");
asm("STR R1,[R0, #+0]");
}
}
Опять работает, значит инициализации прошли одинаково. Явно проблема в моем непонимании синтаксиса асм-файла версии 5.40. Гдето косяк с обьявлением расположения, в icf файле регион .text обявлен так:
define symbol __ICFEDIT_region_ROM_start__ = 0x100;
define symbol __ICFEDIT_region_ROM_end__ = 0x7FFFF;
define memory mem with size = 4G;
define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__];
place in ROM_region { readonly, block BOOT, section .text };
В чем может быть косяк?