在MSP430的RAM中调试程序的研究

本文介绍了如何在MSP430F5529的RAM中进行程序调试,详细解析了MSP430F5529的启动过程,包括中断向量表的位置和程序入口点。通过调整IAR IDE的设置和链接器脚本,实现了在RAM中调试,避免了直接运行到main函数,确保了程序的完整执行流程。此外,还讨论了RAM与FLASH之间的切换问题,以及如何处理中断向量表,确保在RAM调试时中断功能的正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       先说下我所使用的IDE及硬件,IDE为IAR集成开发环境,本人从学习单片机时就使用的IAR,CCS也用过,但觉得没IAR使用的顺手,如果是CCS爱好者请自己去研究下CCS中应该怎么设置才能在RAM中调试MSP430的程序,理论上也是很简单的。硬件为MSP-EXP430F5529LP,也就那块红色的MSP430F5529 LaunchPad 。至于为什么要在RAM中调试程序,自己去百度这样做的好处吧,我也懒得说了。

       首先简单分析下MSP430F5529的启动过程,根据其官方数据手册所述,中断向量表如下:

可以看到中断向量表在0xFF80-0xFFFF,其中复位向量在0xFFFE-0xFFFF,一共两个字节,16位,系统上电或复位后从这里取出16数据作为PC的值,然后MCU开始执行“main”函数,其实并不是最先执行的main函数,而是执行IAR编译器定义的程序入口点__program_start函数,其又被编译器定义为cstart_begin函数,后面紧跟着的是cstart_call_main函数,此函数才会去调用main函数。口说无凭,实验为证。

       使用IAR创建一个工程,在main.c中随便写几句代码,然后在工程选项的Debugger子选项卡中取消勾选Run to main,取消此勾选的原因是此选项会在调试中直接让单片机运行到main函数的第一行代码然后暂停。这样一来main函数之前的代码就无法看到了,我这里使用的是软件仿真,硬件仿真也会是一样的结果。

设置完后点击调试按钮出现反汇编窗口,如下图,可以看到,程序并没有停在左边的源代码窗口,而是停在了右边的反汇编窗口,并且当前程序的地址为0x4400,其具有两个标号,分别为cstart_begin和__program_start,此函数只有一句代码"MOV.W #0x4400,SP",不难看出这是在设置堆栈指针SP为0x4400(注意和当前的PC值不要搞混,虽然值是一样的),下面紧跟标号为cstart_call_main的函数,此函数第一句代码是调用的main函数,第二句调用exit函数,exit函数是编译器自动为我们定义的函数,这里不做说明。

然后再在Go to那里输入中断向量表的地址0xFFFE,结果如下图,红框处即为复位向量,其值为0x4400,后面是5529的参考手册中所说的仿真器指令中的一条,不做分析。于是验证了上面所说的MSP430F5529的启动过程。

既然已经知道了MSP430F5529的启动过程,那么接下来就是找链接器脚本了,不过IAR将其叫做XLINK configuration file(XLINK配置文件),其后缀名为.xcl,在工程选项的Linker子选项卡中有和链接器有关的选项,如下图

可以看到Linker configuration file选项一栏有Override default选项,将其勾选,然后就可以找到IAR默认使用的链接器脚本文件,其路径为X:\

Program Files (

NB-IoT的中文指令集,基于BC95 657 SP2版本翻译的。 —————————————————————— AT 命令 描述 实现的状态 3GPP Commands (27.007) AT+CGMI 查询制造商 ID B350+ AT+CGMM 查询模块型号 B350+ AT+CGMR 查询固件版本 B350+ AT+CGSN 查询模块序列号 B350+ AT+CEREG 查询网络注册状态 B350+ AT+CSCON 查询信号连接状态 B350+ AT+CLAC 列出可用命令 B350+ AT+CSQ 获取信号强度 B350+ AT+CGPADDR 显示 PDP 地址 B350+ AT+COPS 选择接入的网络 B350+ AT+CGATT PS 连接或分离 B350+ AT+CGACT 激活或停用 PDP 上下文 B657SP1+ AT+CIMI 查询国际移动设备身份码 B350+ AT+CGDCONT 定义一个 PDP 上下文 B350+ AT+CFUN 设置终端功能 B350+ AT+CMEE 报告移动终端错误 B600+ AT+CCLK 返回当前日期和时间 B656+ AT+CPSMS 省电模式设置 B657SP1+ AT+CEDRXS eDRX 设置 B657SP1+ AT+CEER 扩展错误报告 B657SP1+ AT+CEDRXRDP eDRX 阅读动态参数 B657SP1+ AT+CTZR 时区报告 B657SP1+ ETSI Commands(正在开发中) AT+CSMS 选择短消息服务 B657SP1+ AT+CNMA 模块消息提醒 B657SP1+ AT+CSCA 服务中心地址 B657SP1+ AT+CMGS 发送短消息 B657SP1+ AT+CMGC 发送短信命令 B657SP1+ AT+CSODCP 通过控制层发送原始数据 B657SP1+ AT+CRTDCP 通过控制层传送终端数据 B657SP1+ General Commands 通用命令 AT+NMGS 发送消息到 CDP 服务器 B350+ AT+NMGR 接收 CDP 服务器消息 B350+ AT+NNMI 接收消息标志 B350+ AT+NSMI 发送消息的标志 B350+ AT+NQMGR 查询接收到的消息量 B350+ AT+NQMGS 查询发送的消息量 B350+ AT+NMSTATUS 信息注册状态 B657SP1+ AT+NRB 模块重启 B350+ AT+NCDP 配置和查询 CDP 服务器设置 B350+ AT+NUESTATS 获取的操作统计 B350+ AT+NEARFCN 指定搜素频率 B350+ AT+NSOCR 创建 Socket B350+ AT+NSOST 发送数据 B350+ AT+NSOSTF 发送有标记数据 B656+ AT+NSORF 接收命令 B350+ AT+NSOCL 关闭 Socket B350+ +NSONMI 指示 Socket 消息到达(只响应) B350+ AT+NPING 测试 IP 网络连接到远程主机 B350+ AT+NBAND 设置频段 B600+ AT+NLOGLEVEL 设置日志级别 B600+ AT+NCONFIG 配置模块的功能 B650+ AT+NATSPEED 配置 UART 端口波特率 B656+ AT+NCCID 卡片识别 B657SP1+ AT+NFWUPD 通过 UART 更新固件 B657SP1+ AT+NRDCTRL 控制无线配置 B657SP1+ AT+NCHIPINFO 读取系统信息 B657SP1+ Temporary Commands 临时命令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值