3-从文件中使用channel-buffer读取数据

package com.netty.bufferandchannel;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @author Fighting
 * @version BufferAndChannelRead, v 0.1 2020/8/12 0:03 Fighting
 * @Content
 */
public class BufferAndChannelRead {
    public static void main(String[] args) throws IOException {
        File file = new File("G:\\netty-workspace\\netty-test\\src\\main\\java\\com\\netty\\bufferandchannel\\demo.txt");
        FileInputStream fileInputStream = new FileInputStream(file);
        FileChannel channel = fileInputStream.getChannel();

        ByteBuffer buffer = ByteBuffer.allocate(1024);

        channel.read(buffer);

        System.out.println(new String(buffer.array()));
    }
}

跟踪上面的代码:

channel中的数据如何加载到buffer中的呢??这个里面并没体现??后续在看....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RT-Thread Studio是一个基于RT-Thread实时操作系统的集成开发环境,它可以方便地进行嵌入式软件开发。在这个环境下,我们可以使用DMA模式实现stm32f407的多通道ADC数据采集。 首先,我们需要配置ADC的多通道扫描模式,可以通过HAL库提供的函数进行配置。例如,我们可以使用以下代码实现通道1、2、3的扫描: ``` ADC_ChannelConfTypeDef sConfig = {0}; sConfig.Channel = ADC_CHANNEL_1; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES; sConfig.SingleDiff = ADC_SINGLE_ENDED; sConfig.OffsetNumber = ADC_OFFSET_NONE; sConfig.Offset = 0; HAL_ADC_ConfigChannel(&hadc1, &sConfig); sConfig.Channel = ADC_CHANNEL_2; sConfig.Rank = ADC_REGULAR_RANK_2; HAL_ADC_ConfigChannel(&hadc1, &sConfig); sConfig.Channel = ADC_CHANNEL_3; sConfig.Rank = ADC_REGULAR_RANK_3; HAL_ADC_ConfigChannel(&hadc1, &sConfig); hadc1.Init.ScanConvMode = ENABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.NbrOfDiscConversion = 0; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 3; HAL_ADC_Init(&hadc1); ``` 接下来,我们需要配置DMA的通道和缓冲区,可以使用HAL库提供的函数进行配置。例如,我们可以使用以下代码实现DMA通道1和缓冲区的配置: ``` DMA_HandleTypeDef hdma_adc1 = {0}; hdma_adc1.Instance = DMA2_Stream0; hdma_adc1.Init.Channel = DMA_CHANNEL_0; hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE; hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; hdma_adc1.Init.Mode = DMA_CIRCULAR; hdma_adc1.Init.Priority = DMA_PRIORITY_HIGH; hdma_adc1.Init.FIFOMode = DMA_FIFOMODE_DISABLE; HAL_DMA_Init(&hdma_adc1); __HAL_LINKDMA(&hadc1, DMA_Handle, hdma_adc1); HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_buffer, ADC_BUFFER_SIZE); ``` 最后,我们需要在主循环读取DMA缓冲区的数据,可以使用以下代码实现: ``` while (1) { for (int i = 0; i < ADC_BUFFER_SIZE; i += 3) { uint16_t ch1 = adc_buffer[i]; uint16_t ch2 = adc_buffer[i + 1]; uint16_t ch3 = adc_buffer[i + 2]; // 处理数据 } HAL_Delay(10); } ``` 通过以上步骤,我们就成功地使用DMA模式实现了stm32f407的多通道ADC数据采集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值