编译失败,总是提示SEGMENT COMBINATION ERROR
使用了 https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5211&extra=&highlight=4%E4%B8%B2%E5%8F%A3DMA&page=1 这位大佬的串口程序,然后一直提示SEGMENT COMBINATION ERROR又新建了一个工程,然后还是提示这个,小白求助各位大佬帮忙看看
编译结果是这样的 由于连接错误所给段未能连入类型总段,并被忽略
没遇到过这个错误 首先,HUGE模式要参考规格书第5章介绍设置:
其次,DMA UART1收发中断向量都写成了 50 (DMA_UART1RX中断向量应该是 51):
本人的理解, 试回答楼主的问题...
*** ERROR L101: SEGMENT COMBINATION ERROR
SEGMENT: ?PR?IV?50
MODULE:.\Objects\UART1.obj (UART1)
根据提示直译看...
SEGMENT COMBINATION ERROR
就是"段组织错误",
SEGMENT: ?PR?IV?50
这一句指出: 错误在程序段中的中断矢量表中.
MODULE:.\Objects\UART1.obj (UART1)
这是指出问题是出在UART1这个模块中
那么, 再看 UART1模块. 楼主是用的是库函数, (不知是否修改过? 一般最好不要改动.)
其中:
/*---------------------------------------------------------
DMA_UART1TX中断
----------------------------------------------------------*/
void DMA_UART1TX_ISR_Handler(void) interrupt 50
{
DMA_UR1T_STA = 0; //清除中断标志
SEND_SIZE-=SEND_DMA_SIZE; //发送数量递减
SEND_POINT+=SEND_DMA_SIZE;//发送指针递加
if(SEND_POINT>=UART1_SEND_BUF_SIZE)SEND_POINT=0;//指针循环调整
if(SEND_SIZE) //如果有数据要发出
{
SEND_DMA_SIZE = (SEND_APP_WR_ADDR>SEND_POINT)? SEND_APP_WR_ADDR-SEND_POINT : UART1_SEND_BUF_SIZE-SEND_POINT;
DMA_UR1T_AMTH = (SEND_DMA_SIZE-1)>>8; //字节数
DMA_UR1T_AMT= (SEND_DMA_SIZE-1); //字节数
DMA_UR1T_TXAH = (u16)(&SEND_BUF)>>8; //地址
DMA_UR1T_TXAL = (u16)(&SEND_BUF); //地址
DMA_UR1T_CR = 0XC0; //启动DMA
}
else{ //没有数据要发出,恢复到默认状态
SEND_ENDBZ = 1;
SEND_DMA_SIZE = SEND_POINT = SEND_APP_WR_ADDR = 0;//此句非必要
}
}
/*---------------------------------------------------------
DMA_UART1RX中断
----------------------------------------------------------*/
void DMA_UART1RX_ISR_Handler(void) interrupt 50
{
DMA_UR1R_STA = 0; //清除中断标志
DMA_UR1R_CR = 0XA1; //开DMA接收
}
发送中断和接收中断, 用了同一个中断矢量号 50
这与错误提示相吻合, 估计问题是出在这里.
楼主可从这里着手解决之...
一般可以用一个中断服务程序, 在其中根据发送中断和接收中断的不同标志位, 来分别做处理...
仅供参考....
浦江一水 发表于 2024-9-3 09:53
本人的理解, 试回答楼主的问题...
*** ERROR L101: SEGMENT COMBINATION ERROR
收到!感谢您的解答,成功编译通过,不知道这个中断号啥时候变了 乘风飞扬 发表于 2024-9-3 09:52
首先,HUGE模式要参考规格书第5章介绍设置:
其次,DMA UART1收发中断向量都写成了 50 (DMA_UART1RX中断向 ...
感谢您的解答!成功解决问题 第一次遇到这情况,我也学习到了{:4_165:} 中断号错也会报错啊,才知道 学习了。
页:
[1]