C_FLASH_FUNCTION_ADDRESS
- это определенное место во флэш-памяти
Так что C_FLASH_FUNCTION_ADDRESS
- это адрес во флэш-памяти.
Но #define C_FLASH_FUNCTION_ADDRESS (ptemp)
читает значение , сохраненное в ptemp
.
Вам нужно одно из этих двух изменений.
Получите адрес из ptemp
(но он был приведен к другому типу, uint32_t
вместо unsigned long
, тип должен быть таким же и достаточным для хранения адреса, используйте intptr_t
).
#define C_FLASH_FUNCTION_ADDRESS (&ptemp)
...
pPointerToFunc = (void *)*C_FLASH_FUNCTION_ADDRESS;
или прочитайте и приведите само значение
#define C_FLASH_FUNCTION_ADDRESS (ptemp)
...
pPointerToFunc = (void *)C_FLASH_FUNCTION_ADDRESS;
Обновление:
Что бы я ни делал, я не должен менять эту строку -
pPointerToFunc = (void *)*(uint32_t *)C_FLASH_FUNCTION_ADDRESS;
Может ли это быть возможно?
Используйте первый подход, но ptemp
должен быть uint32_t
- того же типа, что и приведение в (фиксированной) строке.
#define C_FLASH_FUNCTION_ADDRESS (&ptemp)
...
uint32_t long ptemp;
...
pPointerToFunc = (void *)*(uint32_t *)C_FLASH_FUNCTION_ADDRESS;
Обеспечение 32-битных указателей (используйте 32-битную среду программирования, для 64-битных ОС и gcc можно использовать -m32
, если установлена 32-битная поддержка).