c - 移动数组中的元素

标签 c arrays stm32

我需要一点帮助。我想将数组中的元素向上移动一个元素,以便新位置 1 包含位置 1 的旧值,new-2 包含 old-1,依此类推。旧的最后一个值被丢弃,第一个位置的新值是我每秒给的一个新值。

我使用大小为 10 的数组:

uint32_t TEST[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

我使用的代码必须每秒执行一次。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    /* Code for shifting the elements */
    for (int i = 0; i < 9; i++) 
    {                
       TEST[i+1] = TEST[i];
    }
    TEST[0] = HAL_ADC_GetValue(&hadc);
}

最佳答案

Ringbuffer 导致较少的数据复制,如果您希望 last_pos 指向最新的样本,您可以在读取之前增加它。

uint32_t TEST[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int last_pos = 0; /* init to any valid number between 0 and 9 inclusively */

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    last_pos = (last_pos + 1) % 10;
    TEST[last_pos] = HAL_ADC_GetValue(&hadc);    
}

关于c - 移动数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36997652/

相关文章:

sql - 如何将数组转换为类型?

c - 如何计算应用加成的几率(即暴击几率)?

c - fork 和pid

c++ - 要优化的 CUDA 内核

java - 在 Java 中访问嵌套对象的数组

java - 将使用字节的 java 函数转换为 Kotlin

c - 让 DMA USART 在 STM32L053R8T6 上工作

c - 在FLASH存储器底部放一个bootloader程序

c - UART 至 UART 桥接器 STM32

c - 我一定是在某处使用 recv( ) 从 TCP 套接字接收数据时遇到了缓冲区限制