50

帖子

0

TA的资源

一粒金砂(中级)

21
 

阶段中遇到了以下问题——

  • 为什么在一个复用的中断服务函数里执行跳转,只能存在asm跳转指令?(急需解决)

如图——

        该中断服务函数由bootloader建立。根据标志位判断该串口中断执行的是APP还是bootloader的中断。响应APP的中断时,需要跳转到APP的中断向量区指向的地址中执行中断服务函数。但是只要else里是非asm汇编跳转指令,PC指针会从APP的中断服务函数中回来,停在某一地址。

        如果else里的代码也是asm汇编跳转指令,APP正常响应中断。

此帖出自单片机论坛
 

回复

50

帖子

0

TA的资源

一粒金砂(中级)

22
 

    猜测根本原因出在出栈上(不确定)。通过反汇编窗口,可以看到正常响应的汇编指令只有一句中断返回指令reti,而异常响应的汇编指令前还有出栈指令pop。

正常

异常

此帖出自单片机论坛
 
 

回复

50

帖子

0

TA的资源

一粒金砂(中级)

23
 
  • 第二次擦写硬件中断向量区时,为什么单片机会死机?(已解决)

    详细描述:更新APP时需要先擦除APP代码区和APP中断向量区,APP中断向量区和硬件中断向量区同在一个512字节大小的段,擦除APP时,硬件中断向量区也被擦除了。所以擦除前先读取硬件中断向量区的内容,擦除后再把先前读取的内容填入硬件中断向量区。下载编译bootloader,第一次更新APP时,可以正常执行读取à擦除à填写的步骤,但第二次更新时,运行到擦除flash时,单片机死机了。代码区和中断向量区都是ff,读取flash的缓存区有硬件中断向量区的正常数据,但PC指针不运行。

    原因:擦写flash的程序段有_DINT()和_EINT()语句,硬件中断向量区被擦除后,_EINT()打开全局中断,没有执行目标,造成单片机死机

    解决办法:新建一个擦除函数,擦除时关闭全局中断,擦除结束把硬件中断向量区的数据重新填回去,再开启全局中断。

此帖出自单片机论坛
 
 
 

回复

50

帖子

0

TA的资源

一粒金砂(中级)

24
 
本帖最后由 luaffy 于 2020-9-8 14:39 编辑

map文件详解

    MAP 文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示方法,它可以在任何地方、任何时候使用,不需要有额外的程序进行支持。

  • 查看函数的内存占用情况

        如下图,<CODE>1所指的函数Flash_Read();地址为85FC - 8617 ,占0x1c bytes,被flashhandle 文件的Application()函数,EraseCode()函数和bootcmd文件的PcCmd_Process()函数调用。

  • 查看程序全局符号

        MAP文件和XCL文件中,重要符号含义如下——

        DATA16_AN:外围文件映射

        DATA16_I:通过从DATA16_ID复制初始化的数据/定义时有初始化的变量

        DATA16_Z:定义时初始化为0的数据

        CSTACK:栈

        DATA16_C:常数,包括字符串

        CSTART:程序启动代码

        ISR_CODE:中断服务函数程序代码

        DATA16_N:使用__no_init定义的数据/未在定义时初始化的变量

        DATA16_HEAP:malloc和free使用的堆

        TLS16_I:主线程的线程本地存储

        DATA16_ID:数据初始化器

        CODE:程序代码

        ISR_CODE:中断服务函数程序代码

        INTVEC:中断向量

        RESET:复位中断向量

        ISR_CODE:中断服务函数程序代码

     

 

         结合map文件、用户手册、内存窗口,可以了解到MSP430F247的内存划分情况。

  •  外围文件映射(0x0000-0x01FF)

        单片机预留0x0000-0x01FF地址放置外围映射数据,msp430f247只用了0x0000-0x01A8,细划分为——

        特殊功能寄存器SFR(0x0000-0x0003),MAP: DATA16_AN

        外围文件映射/寄存器(0x0004-0x01A8),MAP:DATA16_AN

  • RAM(0x0200-0x09FF)

        RAM镜像Mirrired (0x1100-0x18FF)数据的拷贝

  • 未知数据(0x0A00-0x0BFF)

        大小正好为512bytes,一个扇区,写满FF 3F

  • BSL(0x0C00-0x0FFF)

        固化的bootloader

  • information memory(0x1000-0x10FF)

        INFOA=10C0-10FF

        INFOB=1080-10BF

        INFOC=1040-107F

        INFOD=1000-103F

  • RAM(0x1100-0x20FF)

        镜像(Mirrired):0x1100-0x18FF

        拓展(Extended):0x1900-0x20FF

        RAM(0x0200-0x09FF)的内存空间拷贝了一份镜像(0x1100-0x18FF)的数据。

        镜像和拓展区装载了通过从DATA16_ID复制初始化的数据/定义时有初始化的变量(MAP:DATA16_I)、定义时初始化为0的数据(MAP:DATA16_Z)、栈区数据(MAP:CSTACK)

  • 未知数据(0x2100-0x7FFF)

        写满FF 3F

  • code memory(0x8000-0xFFFF)

        以bootloader为例,code memory再细分为:常数区0x8000-0x8003(MAP: DATA16_C),启动程序0x8004-0x801B(MAP: CSTART),程序区0x801C-0x87FF(MAP: <CODE> 1 ,硬件中断向量区0xFFC0-0xFFFD(MAP: INTVEC),复位中断向量地址0xFFFE – 0xFFFF(MAP: RESET)

        综上,MSP430F247硬件内存空间详细划分如下图:

此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表