社区
单片机/工控
帖子详情
IAR编译器在函数调用时入栈问题
genelin22
2008-07-01 02:10:15
用IAR 写51的程序
发现有的函数调用的时候将编译器返回地址入栈了,
而有的函数在调用的时候却没有将返回地址入栈,但是执行完函数后依然能够正确返回
这是什么原因呢?
...全文
98
3
打赏
收藏
IAR编译器在函数调用时入栈问题
用IAR 写51的程序 发现有的函数调用的时候将编译器返回地址入栈了, 而有的函数在调用的时候却没有将返回地址入栈,但是执行完函数后依然能够正确返回 这是什么原因呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shuiyan
2008-07-01
打赏
举报
回复
51下的一般都是入栈的,寄存器不够用,很容易就被占用了。不像ARM的,lr寄存器是专用的。
编译器根据编译过程,确保跳转前后的一致性,入栈了出的时候也是读栈,而不会去读寄存器。
genelin22
2008-07-01
打赏
举报
回复
我想问的是返回地址而不是返回值
就是说调用某个子函数返回后,应该从哪里继续执行的那个地址。
编译器在子函数内是如何保存这个地址的呢?
我发现他有时候是入栈,有时候则不入栈,奇怪~~
shuiyan
2008-07-01
打赏
举报
回复
返回地址一般是在寄存器中,(好像是)只接收8bit,一个寄存器,也就是char型的返回值,超过了,比如int型的,就要将其入栈了。
而正确返回是编译器保证的,因为你程序写的时候就定义了返回值的类型,编译自然会在编译的时候读了寄存器再读栈的。因为这个是IAR编译器定好的标准。不用你担心的。
ARM
IAR
C / C ++
编译器
参考指南和
IAR
链接器和库工具使用介绍
ARM
IAR
C / C ++
编译器
参考指南和
IAR
链接器和库工具使用介绍
利用
IAR
编译器
分配MAXQ:registered:微控制器上的闪存和SRAM存储器
摘要:通过调用读、写程序存储器,MAXQ器件提供特殊的固定用途ROM函数。然而,在MAXQ微控制器上无法直接存取储存在程序存储器中的数据。固定用途ROM函数起始地址集成在
IAR
Embedded Workbench?,以存取储存的数据。本应用笔记介绍如何利用
IAR
嵌入式工作台工具分配和存取MAXQ微控制器上的闪存和SRAM存储器。 引言 MAXQ架构是一种基于标准Harvard结构、功能强大的单周期RISC微控制器,程序和数据存储总线相互独立。这种组织形式要求每个存储器具有专用总线(图1),所以可同
时
读取指令和操作数。由于不存在单条数据总线的冲突
问题
,MAXQ指令的执行
时
间仅需要单
一款针对 ARM Cortex-M 系列 MCU 的错误代码自动追踪库,源代码
CmBacktrace(Cortex Microcontroller Backtrace),可自动跟踪和定位ARM Cortex-M系列MCU的错误代码,并自动分析错误原因。主要特点如下: 支持的错误包括: 断言 故障(硬故障、内存管理故障、总线故障、使用故障、调试故障) 故障原因 自动诊断:当发生故障
时
,可自动分析故障原因,定位故障代码位置,无需人工分析复杂的故障寄存器; -输出错误站点的
函数调用
栈(需要配合addr2line工具进行精确定位),恢复错误发生
时
的字段信息,更快更准确地定位
问题
代码位置和逻辑。在正常情况下,也可以使用该库来获取当前
函数调用
堆栈; 支持裸机和以下操作系统平台: RT线程 UCOS公司 FreeRTOS(源代码需要修改) 根据错误场景状态,输出对应的线程栈或C主栈; 故障诊断信息支持多种语言(目前为:简体中文、英文); 适配Cortex-M0/M3/M4/M7 MCU; 支持
IAR
、KEIL、GCC
编译器
;
函数查找工具v1.6(原名“栈分析工具”)
根据gcc/mdk/
iar
/ccs等
编译器
产生的ELF格式文件,计算出函数地址对应的函数(名)及相应的代码位置。因此可以可利工具回溯异常
时
的
函数调用
。支持32位/64位elf文件自适应解析、支持高dpi显示、支持窗口伸缩。 v1.6重要新增:显示源码行号
STM32 USB_CDC配置
STM32 USB_CDC配置前言:配置思路 前言: 做之前先要有一些准备: 1、PC上装好VCP1.31以上的虚拟串口驱动 2、准备一块带USB的STM32(是要连接好USB接口的,不是串口的USB) 3、安装好STM32CUBEMX,并下载好STM32F1的最新的包 4、安装好keil/
iar
等
编译器
配置思路 1、先配置好STM32的
时
钟 2、配置使能USB设备 注意:如果是F4之类的,不止有这个选项,但名字没有变。 3、USB设备配置为虚拟端口模式 4、生成工程并打开,我这里用keil 5.25 5、编译通过就没啥
问题
,调用发送函数 注意:别忘了在main函数中添加头文件 #inclu
单片机/工控
27,382
社区成员
28,770
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章