如何为大型数组创建 for 循环

问题描述 投票:0回答:1

我想通过编写程序来创建可以使用示波器查看的灵活信号形状。我使用数组来形成信号,例如{2048, 4026, 2048, 0},其中2048代表我要调整的平坦线,4026代表峰值,0代表谷值。我想灵活调整2048的值;例如,如果我输入 x=3,它应该输出 {2048, 4026, 2048, 2048, 2048, 0}。但是,我对如何使用 for 循环或 if 语句感到困惑,因为我想将值放在中间。我的代码需要帮助;请提供建议或可能的示例代码。

我想要的结果 这是我想要创建的内容的描述,这是我的代码。

像2048这样的代码是我想要灵活处理的部分。

#define NS 4
uint32_t Wave_LUT[NS] = {
2048,4026, 2048,0
};
HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, Wave_LUT, 4, DAC_ALIGN_12B_R);
HAL_TIM_Base_Start(&htim4);

请帮助我,我真的无法再类比了。

c xcode concurrency stm32 keil
1个回答
0
投票

您没有显示

NS
x
如何相关。在此示例中,我假设
NS
始终足够大以容纳结果数组。

从你的例子中我得到了一些固定值。 你的数组布局总是这样的:

  • 第一个值为 2048
  • 第二个值是 4026
  • x 值为 2048
  • 最后一个值为 0

这意味着,数组中总共有

x+3
个元素,除了 2 个之外,所有元素都具有相同的值。

让我们填写以下值:

#include <stdio.h>  // for perror
#include <stdlib.h> // for exit

#define NS 1000
uint32_t Wave_LUT[NS];

void Init_DAC_Array(size_t x)
{
  if (x+3 > NS)
  {
    perror("x exceeds array size!");
    exit(1);
  }

  for (size_t i = 0u; i < x+3u; i++)
  {
    Wave_LUT[i] = 2048u;
  }
  Wave_LUT[1] = 4026u;
  Wave_LUT[x+2] = 0u;
}
© www.soinside.com 2019 - 2024. All rights reserved.