특정 주소 (예 : Double function indirection in C)에서 함수를 호출해야하지만 정확히 같지는 않습니다. 필자는 매핑 테이블에서 포인터를 가져 와서 동적으로 생성 된 함수 포인터를 조작 할 수 있습니다. 예, 나는 이러한 유형의 통화 않도록하려면 대신ARM Cortex M3의 GCC : 특정 주소의 함수 호출
((int)(*)(void*)) compute_volume = ((int)(*)(void*)) 0x20001000;
int vol = (*compute_volume)();
을, 나는 compute_volume()
기능이 다른 이미지에 의해 제공되는 것을 제외하고는 다음을 달성하기 위해 링커 제공 기호 또는 다른 방법의 일종을 사용하는 것을 선호 이 같은 아마 뭔가 :
extern int compute_volume(void);
vol = compute_volume();
즉, 나는 이렇게 플래시마다 기호 나 계산 변경 사항을 수정하거나 덮어 쓰기의 필요성을 줄이고, 여러 개의 이미지로 내 코드를 분할 할 계획입니다.
의견이나 제안이 있으십니까?
함수 포인터는이를 수행하도록 설계되었습니다. 그러나 문법이 당신을 괴롭히는 경우,이 경우에는 #define 또는 아마도 [typedef] (https://stackoverflow.com/questions/4295432/typedef-function-pointer) –
또는 http : // blog를 사용할 수 있습니다. .atollic.com/gnu-gcc-on-arm-cortex-devices-place-code-and-data-on-special-memory-addresses-gnu-ld- 링커 사용 –
참고로 * 마이크로 컨트롤러 플래시 메모리가 마모 레벨링을하지 않기 때문에 매번 전체 플래시를 다시 쓰는 것에 비해 업데이트주기를 줄이지는 않습니다. –