This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我当前为 MSP430F2618工作的引导加载程序在64K 的存储器大小和 MSP430X 的指令集下工作正常。 将存储器大小更改为1MB 不会让函数指针跳转到所需的中断矢量。 引导加载程序的中断矢量在 crt0.asm 下定义如下:
;跳转例程以将中断从加载程序传递到 Loadee .code #define LOADEE_INT_VEC 0xE9C0 jumpvec0: MOV LOADEE_INT_VEC+0、PC 跳向1: MOV LOADEE_INT_VEC+2、PC 跳向2: MOV LOADEE_INT_VEC+4、PC 跳向3: MOV LOADEE_INT_VEC+6、PC 跳向4: MOV LOADEE_INT_VEC+8、PC 跳向5: MOV LOADEE_INT_VEC+10、PC 跳向6: MOV LOADEE_INT_VEC+12、PC 跳向7: MOV LOADEE_INT_VEC+14、PC 跳向8: MOV LOADEE_INT_VEC+16、PC 跳向9: MOV LOADEE_INT_VEC+18、PC 跳向10: MOV LOADEE_INT_VEC+20、PC 跳向11: MOV LOADEE_INT_VEC+22、PC 跳向12: MOV LOADEE_INT_VEC+24、PC 跳向13: MOV LOADEE_INT_VEC+26、PC 跳向14: MOV LOADEE_INT_VEC+28、PC 跳向15: MOV LOADEE_INT_VEC+30、PC 跳向16: MOV LOADEE_INT_VEC+32、PC 跳向17: MOV LOADEE_INT_VEC+34、PC 跳向18: MOV LOADEE_INT_VEC+36、PC 跳向19: MOV LOADEE_INT_VEC+38、PC 跳向20: MOV LOADEE_INT_VEC+40、PC 跳向21: MOV LOADEE_INT_VEC+42、PC 跳向22: MOV LOADEE_INT_VEC+44、PC 跳向23: MOV LOADEE_INT_VEC+46、PC 跳向24: MOV LOADEE_INT_VEC+48、PC 跳向25: MOV LOADEE_INT_VEC+50、PC 跳向26: MOV LOADEE_INT_VEC+52、PC 跳向27: MOV LOADEE_INT_VEC+54、PC 跳向28: MOV LOADEE_INT_VEC+56、PC 跳向29: MOV LOADEE_INT_VEC+58、PC 跳向30: MOV LOADEE_INT_VEC+60、PC #ifndef __NOVECTORS ;复位矢量 向量 保持 DW jumpvec0 DW 跳向1 DW 跳转2 DW 跳转3 DW 跳转4 DW 跳转矢量5 DW 跳转6 DW 跳转7 DW 跳转8 DW 跳转9 DW 跳转10 DW 跳转11 DW 跳向12 DW 跳转13 DW 跳转14 DW 跳转15 DW 跳转16 DW 跳转17 DW 跳转18 DW 跳转19 DW jumpvec20 DW jumpvec21 DW jumpvec22 DW 跳转23 DW jumpvec24 DW 跳转25 DW 跳转26 DW 跳转27 DW 跳转28 DW 跳转29 DW 跳转30 DW __reset #endif //#ifndef __NOVECTORS //;复位向量 // .vectors // .keep // org) RESET_VECTOR // DW _reset //#endif
从引导加载程序跳转到程序的代码如下所示:
#define bootloader_vector 0xE9FE typedef void (* fnptr)(void);
unsigned int addr =*(unsigned int *) bootloader_vector; fnptr JAF =(fnptr) addr;
(*JAF)();//条件检查内部
该程序是在用于 MSP430的 CrossStudio 中编写的。 当我将存储器大小设置为64K 时、在.hzx 下定义的 intvec 指示 jumpvecX 定义的地址从82fc 开始到 fafc、并在语句 DW __reset 的00ff 结束。 地址增加1024。 即82fc、86fc、8afc 等。 将存储器大小更改为1M 会初始化 c8fc 中的 jumpvecX 定义、递增1024、jumpvec14会溢出16位地址。 尽管我使用的是 MSP430X 和1M 存储器大小、但 INTVEC 大小的限制限制为64K 意味着无法将所有 jumpvec 位置添加到其中。 我如何解决这个问题?
您好、Arunt、
对延误表示歉意。 您是否能够使 BSL 正常工作? 我不确定您的1M 是什么意思、但听起来您想移动中断矢量表吗? 我进行了一些搜索、并找到了该主题的主题: https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/343580?Relocating-the-vector-table-in-MSP430
请告诉我它是否有用。
谢谢、
JD
JD、您好!
问题现已解决。 乘以1M、我的意思是大于64K 的存储器大小。 当使用 MSP430指令集和64K 存储器大小时、具有地址的函数指针正常工作。 但是、使用 MSP430X 指令集和1M 存储器大小时 、不能为函数指针分配任意地址、并且在为1M 地址空间构建时调用该地址。 因此、添加了汇编文件以跳转到引导加载程序矢量。 解决了该问题。
谢谢、
Arun