Цитата(romas2010 @ Apr 4 2018, 14:51)

как в кейле сделать чтобы константный массив представлялся не данными, а кодом
думаю никак...
Цитата(romas2010 @ Apr 4 2018, 14:51)

то есть например
Код
const user_code[]={0x01,0xb5}
дизассемблировалось в кейле на как DCW 0xb501 , а как push{r0,lr}
ну так и должно быть... данные они и есть данные...
Цитата(romas2010 @ Apr 4 2018, 14:51)

Дело в том, что у меня имеется бинарный файл с неким набором процедур, которые вызываются из моего проекта. Я знаю как адреса размещения этих функций, так и их семантику..При отладке в кейле вызовы этих процедур естественно приводят к HardFault, так как встречается директива DCW, а не ассемблерная инструкция.
DCW/DCD/DCB это всего-лишь директива ассемблера...
т.е. DCW 0xb501 и push{r0,lr} на выходе выдадут один и от же бинарный код.
А проблема вероятно в неправильном вызове.
вот пример
Код
__attribute__((section(".text"))) // разместим данные в секции кода
const uint8_t user_code[]={
0x10,0xb5, // push{r4,lr}
0x55,0x20, // movs r0, 0x55
0x10,0xbd // pop{r4,pc}
};
int main(void) {
int tmp;
int (*fn)(void) = (int (*)(void)) (1 | (uint32_t)user_code); // ставим младший бит в 1, что значит THUMB код
tmp = fn(); // вернет 0x55
}
в отладчике кейл по-прежнему будет отображать DCW(B,D)