小编bie*_*nle的帖子

为什么不需要释放静态数组?

我想知道为什么不需要释放静态数组?我知道在创建动态数组时,例如

int *p;
p = malloc(10*sizeof(int));
Run Code Online (Sandbox Code Playgroud)

我们必须使用以下内容释放分配的内存:

free(p);
Run Code Online (Sandbox Code Playgroud)

对于函数中的静态数组,静态数组将在被调用函数完成时自动释放.

我不明白的是:当使用如下函数返回静态数组时:

int *subFunc(){
    static int a[5] = {1,2,3,4,5};
    return a;
}

int main(){
    int *p;
    p = subFunc();
}
Run Code Online (Sandbox Code Playgroud)

如果在完成执行后自动释放静态数组,那么我们如何才能正确访问静态数组的值?

c static scope return-value lifetime

31
推荐指数
3
解决办法
5198
查看次数

测量两个不同的(矢量)信号相似性

我正在寻找一种比较(测量)两种不同信号之间相似性的好方法.我不想找到一个信号到另一个信号的时间延迟,但我想知道它们是如何彼此相似的.例如,我有两个信号,比如说s1和s2.两个信号看起来非常相似,但是在一个信号中存在突然跳跃,导致信号的第二部分(也是主导信号)与第一部分相比具有偏移.

在此输入图像描述

当我使用交叉协方差和互相关时,它给我一个非常差的结果,即:

xcov(s1, s2, 0, 'coeff') ----> 0.2153
Run Code Online (Sandbox Code Playgroud)

然而,看看这两个信号,我们可以看到它们非常相似.事实上,如果只从样本中获取两个信号的交叉协方差(50->信号的结尾),结果非常好:

   xcov(s1(50:280), s2(50:280), 0, 'coeff') ----> 0.9666
Run Code Online (Sandbox Code Playgroud)

所以我猜这个问题是由于样本25周围的大跳跃(在红色信号中).

我的问题是:

  • 如何克服上述问题?
  • 交叉协方差(相关)是衡量两个信号之间相似性的好方法吗?
  • 还有其他办法吗?

非常感谢.我真的很感谢你的帮助!

matlab signals signal-processing similarity

8
推荐指数
1
解决办法
1659
查看次数

stm32l0:无法执行 MI 命令。使用 vFlashErase 数据包擦除闪存时出错

我正在使用带有 AC6 STM32 工作台 (eclipse) 的 Nucleo STM32L031。

我编写我的应用程序并进入调试模式,一切正常,直到我在我的应用程序中添加另一个功能。我注意到当我删除/评论“ new_function ”时,软件可以再次进入调试模式。但是,当我将“ new_function ”添加到代码中并进行调试时,会发生错误并且无法进入调试模式。

Error: Error in final launch sequence
Failed to execute MI command:
load C:Project_STM32L031K6-Nucleo\\Debug\\Project.elf 

Error message from debugger back end:
Error erasing flash with vFlashErase packet
Error erasing flash with vFlashErase packet
Run Code Online (Sandbox Code Playgroud)

该错误不仅发生在这个特定的“new_function”上,还会发生在其他函数上,例如由 STM32Cube 生成的 TIM21_Init()。

我试图搜索解决方案,但找不到。

谢谢边

eclipse stm32

5
推荐指数
1
解决办法
2万
查看次数

相位展开问题(相位展开不正确)?

我对随着时间的推移展开阶段有一个问题。

我有一个雷达,可以监视缓慢周期性移动的物体。从接收到的信号中,我想看到物体随时间变化的相位。随时间变化的相位信号是从 FFT 中提取的(在所有 FFT 的同一 FFT bin 中)。这是我得到的结果: 在此输入图像描述

因为阶段被包裹,所以我需要对阶段进行展开。我使用 Matlab 命令“ unwrap ”来实现这一点。所以我得到: 在此输入图像描述

该问题已标记为红色圆圈。在这里,我期望此时的信号能够被解开。但事实并非如此,原因是:

- From time sample NO. 42 -> 44, the phases take two time samples to being
wrapped, instead of only one (i.e between two consecutive time samples).
Because of this the phase-over-time signal are not unwrapped correctly. 
Run Code Online (Sandbox Code Playgroud)

我还尝试使用另一种相位展开方法(自适应数值积分),但结果与使用Matlab 中的“ unwrap ”命令相同。

这是我期望看到的随时间变化的信号(我手动展开): 在此输入图像描述

上面提到的问题是什么(这是一个众所周知的问题还是有任何名称)?当然,解决这个问题的方法是什么?

我非常感谢您的任何帮助!多谢。

matlab signal-processing

4
推荐指数
1
解决办法
1万
查看次数

Matlab使用多条数据线/曲线更新绘图

我想尽快更新包含多条数据线/曲线的图.我已经看到了一些更新绘图的方法,如下所示:

h = plot(x,y);
set(h,'YDataSource','y')
set(h,'XDataSource','x')
refreshdata(h,'caller');
Run Code Online (Sandbox Code Playgroud)

要么

set(h,'XData',x,'YData',y);
Run Code Online (Sandbox Code Playgroud)

对于单曲线,它工作得很好,但是我想要更新一条而不是多条数据曲线.我怎样才能做到这一点?

matlab matlab-figure

3
推荐指数
1
解决办法
1429
查看次数

stm32F4 pwm输入捕获的高频信号约.2MHz的?

我想测量PWM信号的频率.为此,我使用STM-F401RE及其Timer_Input_Capture函数.

问题是:

  • 输入信号具有相当高的频率(约2MHz),
  • STM-F401RE控制器只有80MHz时钟

因此,当使用中断程序计算输入信号的上升沿数时,它会错过许多上升沿(取决于输入信号的频率).当使用示波器并切换I/O引脚时,我发现它只能在频率低于400kHz时捕获所有上升沿.

问题是:如何克服这个问题?还是有另一种方法来测量高频输入pwm信号?

谢谢

stm32 stm32f4discovery stm32f4

3
推荐指数
1
解决办法
5339
查看次数