코드를 테스트하기 위해 STM32 QEMU 디버거를 사용합니다. 나는 함수를 테스트하기 때문에 while (1)을 지운다.STM32의 RAM 메모리에서 함수를 실행하는 방법 C에서 QEMU 디버거 이클립스?
typedef int(*fnc_t) (int);
int multiply(int data) {
return (data * 5);
}
void memorycopy(unsigned char *src, unsigned char *dst, int size) {
int j;
for(j=0; j < size; j++) {
dst[j] = src[j];
}
}
int main(int argc, char* argv[])
{
int i = 0;
unsigned int ram_vector[6];
fnc_t fnc_ram;
printf("1\n");
fnc_ram = (fnc_t) ((int) &ram_vector + 1);
printf("2\n");
volatile int z = (int)(&multiply - 1);
memorycopy((unsigned char*) z, (unsigned char*) fnc_ram, 6);
printf("3\n");
i = fnc_ram(3);
printf("4\n");
printf("Novo i: %d\n",i);
printf("5\n");
}
하지만 i = fnc_ram (3) 함수를 호출 할 때; 다음 오류가 발생합니다.
왜 '& ram_vector + 1'과 왜'& multiply - 1'이 왜 ram_vector와 곱셈이 아닌가? – cleblanc
프로세서가 ARM – Augusto
이므로 ARM에는 + 1이 필요하지 않습니다. 여러 가지 버그가 있습니다. 1을 사용하여 안전성을 확인했지만 도구가 잘못 사용되었다는 것을 의미합니다. cortex-ms에는 벡터 테이블이 있습니다. 진입 점이 아닙니다. 램에서 실행하고 주소 0x00000000 벡터 테이블을 사용하지 않으려면 RAM에 다른 부트 스트랩을 사용하십시오. ROM과 점프에서 복사하십시오. –