如何解决C语言功能的内存地址
我正在使用ARM Cortex M3处理器进入睡眠模式。我必须为此填充一些结构。
这里是其中之一
struct sleep_mode_init_env_tag
{
/* Wake up configuration */
uint32_t wakeup_cfg;
/* Wake up restore address */
uint32_t wakeup_addr;
/* Wake up application start address */
uint32_t app_addr;
/* Memory power configuration for wake-up */
uint32_t mem_power_cfg_wakeup;
/* Clock source for RTC */
uint8_t rtc_ctrl;
/* DMA channel used to save/restore RF registers
* in each sleep/wake-up cycle */
uint8_t DMA_channel_RF;
};
当ı在主循环中进入睡眠模式时,ı要在1分钟后再次返回主循环。因此,您可以看到ı必须在此处写入唤醒功能的内存地址;
uint32_t app_addr;
还有我的返回函数;
void Turn_Wake_up(void) {
Sys_PowerModes_Wakeup();
Sys_Watchdog_Refresh();
Device_Config();
memory_access();
main_loop();
}
制造商公司创建了此.S文件(wake_up.S),并包含在项目中以作为唤醒功能的内存地址;
.thumb_func
.section .app_wakeup_asm
.globl Turn_Wake_up_asm
.extern __stack,4
/* ----------------------------------------------------------------------------
* Function : void Turn_Wake_up_asm()
* ----------------------------------------------------------------------------
* Description : Initialize stack pointer and continue execution
* Inputs : None
* Outputs : None
* Assumptions : None
* ------------------------------------------------------------------------- */
Turn_Wake_up_asm:
movw r0,#:lower16:__stack
movt r0,#:upper16:__stack
msr msp,r0
/* ----------------------------------------------------------------------------
* File end
* ------------------------------------------------------------------------- */
.end
他们已经做到了;
(uint32_t) (&Turn_Wake_up_asm)
所以,我只用了这个
(uint32_t) (&Turn_Wake_up);
并且ı没有任何错误,但是没有用。所以我的主要问题是;
“(uint32_t)(&Turn_Wake_up);和(uint32_t)(&Turn_Wake_up_asm)有什么区别?”
请注意:
***我没有任何有关.S文件内容的信息...
谢谢...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。