zynq sdk使用math.h库报错,提示未定义函数sin

在工程编译设置中修改如下字段:
-Wl,–start-group,-lxil,-lm,-llwip4,-lgcc,-lc,–end-group
编译通过

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是ZYNQ SDK 2018.3下的CAN接收中断例程: ```c #include "xparameters.h" #include "xscugic.h" #include "xcanps.h" #include "xil_printf.h" #define CAN_DEVICE_ID XPAR_XCANPS_0_DEVICE_ID #define INTC_DEVICE_ID XPAR_SCUGIC_SINGLE_DEVICE_ID #define INTC_CAN0_VEC_ID XPAR_XCANPS_0_INTR #define RX_BUFFER_SIZE 32 static XCanPs Can; // CAN控制器实例 static XCanPs_Config *CanConfig; // CAN控制器配置 static XScuGic Intc; // 中断控制器实例 static u32 RxBuffer[RX_BUFFER_SIZE][XCANPS_MAX_FRAME_SIZE_WORDS]; static u32 RxBufferPtr = 0; // CAN接收中断处理函数 static void CanRecvHandler(void *CallBackRef, u32 Status, u32 *FramePtr) { // 将接收到的CAN帧保存到缓冲区中 u32 *DestPtr = RxBuffer[RxBufferPtr++]; u32 LenWords = (FramePtr[0] >> XCANPS_DLC_SHIFT) & XCANPS_DLC_MASK; for (u32 i = 0; i < LenWords; i++) { DestPtr[i] = FramePtr[i]; } // 循环使用缓冲区 if (RxBufferPtr >= RX_BUFFER_SIZE) { RxBufferPtr = 0; } // 清除中断标志位 XCanPs_AcknowledgeIntr(&Can, Status); } int main() { int Status; XCanPs_Config *CanConfig; // 初始化CAN控制器实例 CanConfig = XCanPs_LookupConfig(CAN_DEVICE_ID); if (CanConfig == NULL) { return XST_FAILURE; } Status = XCanPs_CfgInitialize(&Can, CanConfig, CanConfig->BaseAddr); if (Status != XST_SUCCESS) { return XST_FAILURE; } // 初始化中断控制器实例 XScuGic_Config *IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID); if (IntcConfig == NULL) { return XST_FAILURE; } Status = XScuGic_CfgInitialize(&Intc, IntcConfig, IntcConfig->CpuBaseAddress); if (Status != XST_SUCCESS) { return XST_FAILURE; } // 设置中断处理函数和优先级 Xil_ExceptionInit(); Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, (Xil_ExceptionHandler)XScuGic_InterruptHandler, &Intc); XScuGic_Connect(&Intc, INTC_CAN0_VEC_ID, (Xil_ExceptionHandler)CanRecvHandler, &Can); XScuGic_SetPriorityTriggerType(&Intc, INTC_CAN0_VEC_ID, 0xA0, 0x3); XScuGic_Enable(&Intc, INTC_CAN0_VEC_ID); // 启用CAN接收中断 XCanPs_IntrEnable(&Can, XCANPS_IXR_RXNEMPTY_MASK); XCanPs_IntrEnable(&Can, XCANPS_IXR_RXOK_MASK); XCanPs_SetHandler(&Can, (void *)CanRecvHandler, &Can); // 启动CAN控制器 XCanPs_Start(&Can); while (1) { // 此处可以添加其他代码 } return 0; } ``` 此例程实现了CAN接收中断功能,并将接收到的CAN帧保存到缓冲区中。其中,CAN控制器实例使用XCanPs,中断控制器实例使用XScuGic。在main函数中,先初始化CAN和中断控制器实例,然后设置中断处理函数和优先级,接着启用CAN接收中断,最后启动CAN控制器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值