Сделал модельку в simulink, cгенерил код, скомпилил на ПК - все работает.
Скомпилил под МК stm32 с помощью codesourcery g++. Компилится без проблем. В функции initialize() для обнуления переменных используется следующий код
Код
(void) memset(((void *) &newppz_B), 0,
sizeof(BlockIO_newppz));
...
/* states (dwork) */
(void) memset((void *)&newppz_DWork, 0,
sizeof(D_Work_newppz));
/* external inputs */
(void) memset((void *)&newppz_U, 0,
sizeof(ExternalInputs_newppz));
/* external outputs */
(void) memset((void *)&newppz_Y, 0,
sizeof(ExternalOutputs_newppz));
sizeof(BlockIO_newppz));
...
/* states (dwork) */
(void) memset((void *)&newppz_DWork, 0,
sizeof(D_Work_newppz));
/* external inputs */
(void) memset((void *)&newppz_U, 0,
sizeof(ExternalInputs_newppz));
/* external outputs */
(void) memset((void *)&newppz_Y, 0,
sizeof(ExternalOutputs_newppz));
При отладке в момент вызова memset программа уходит в
Код
.section .text.Default_Handler,"ax",%progbits
Default_Handler:
Infinite_Loop:
b Infinite_Loop
.size Default_Handler, .-Default_Handler
Default_Handler:
Infinite_Loop:
b Infinite_Loop
.size Default_Handler, .-Default_Handler
и остается там навсегда. Прерывания еще не разрешены.
Я предпологаю, что либо memset не существует(но линкер должен выругаться), либо поисходит обращение к несуществующей памяти, хотя адрес(&newppz_B) похож на правду(0x200015dc). Подскажите что не так?