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日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改