qq_53667688 2023-03-17 16:02 采纳率: 50%
浏览 70
已结题

DSP编程子函数中传入的结构题参数被覆盖

img


请问这个inwindow结构体在传入子函数以后,其值为什么发生了变化呀?我不理解
环境为CCS12.2,DSP为TMS320F2812

  • 写回答

3条回答 默认 最新

  • 「已注销」 2023-03-17 16:14
    关注

    参考GPT和自己的思路:在C语言中,结构体是通过值传递的方式进行传参的,也就是说,当一个结构体作为参数传递给一个函数时,实际上传递的是结构体的副本,而不是原来的结构体。因此,如果在函数中修改了结构体的值,实际上只是修改了结构体的副本,而不会影响原来的结构体。

    但是,在某些情况下,结构体指针也可以作为参数进行传递。如果传递的是结构体指针,函数中对指针所指向的结构体的修改将会影响原来的结构体。

    因此,您在调用子函数时,需要确认您是以传值方式还是指针方式传递结构体参数。如果是传指针方式,子函数可能会直接修改原结构体中的值。如果是传值方式,子函数则只会修改结构体的副本,而不会影响原结构体的值。

    此外,在嵌入式系统中,可能会存在其他因素导致结构体参数被覆盖,例如内存不足、指针越界等问题。您需要确认代码中是否存在这些问题,以及对应的解决方案。
    根据您提供的代码片段,根据您提供的代码片段,我无法确定导致结构体被覆盖的具体原因。但是,有可能是由于在调用该函数时,传递的结构体参数指针不正确或指针被意外修改了导致的。

    下面是一些可能导致结构体被覆盖的常见原因:

    1 在传递结构体参数时,传递了指向栈上的指针。在子函数中对栈上的指针进行修改时,可能会导致栈上的内存被损坏,进而导致传递的结构体被覆盖。

    2 在调用该函数之前,已经对结构体参数进行了修改。如果该结构体是在全局作用域中定义的,则在调用该函数之前,可能会有其他代码修改了该结构体。

    3 子函数中发生了内存越界的情况,导致修改了未定义的内存区域,其中可能包括传递的结构体参数。

    为了解决这个问题,可以尝试以下步骤:

    1 确保传递给函数的结构体指针是有效的,并且指向的内存区域没有被其他代码修改。

    2 在调用该函数之前,确保传递给函数的结构体参数没有被其他代码修改。

    3 确保在子函数中没有发生内存越界的情况。

    4 如果这些步骤都无法解决问题,可以考虑在代码中添加调试信息,以确定在哪个位置发生了结构体被覆盖的情况。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 赞助了问题酬金15元 3月17日
  • 创建了问题 3月17日

悬赏问题

  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络