go | channel direction、channel sync、channelbuffer

go 中的管道通信

管道通信直连,管道的特点就是单工,一方只能接受/发送

package main
import (
                                "fmt"
)

func ping(pings chan<- string, msg string){

                                pings <- msg
}

/*
        函数pong中 
                参数pings 是一个接收通道(只能从管道接收数据)
                参数pongs 是一个发送通道(只能发送数据给管道)

                <-  在最前头就是发送,反之就是接收
*/
func pong(pings <-chan string, pongs chan<- string){

                        /*      msg := <- pings
                                pong  <- msg

                        */
                        msg := <-pings // pong函数从只接收通道接收数据  
        pongs <- msg  // 然后向只发送通道发送数据  
}

func  main(){

                                pings := make(chan string, 1)
                                pongs := make(chan string, 1)

                                ping(pings, "hello world ! my name is zhangbuda ...")
                                pong(pings, pongs)

                                fmt.Println(<- pongs)
}
#运行结果
hello world ! my name is zhangbuda ...

go 的管道通信,同步

package main
import (
                                "fmt"
                                "time"
)
func worker(done chan bool){

                                fmt.Println("working ...")
                                time.Sleep(time.Second *2)
                                fmt.Println("work done ...")

                                done <- true
}

/*
        实现管道通信同步
*/
func main(){

                                done := make(chan bool, 1)
                                go worker(done)

                                flag := false 
                                flag = <- done
                                if flag {

                                        fmt.Println("the main func is end ...")
                                }

}
#运行结果
working ...
work done ...
the main func is end ...

管道缓冲

package main
import (
                                "fmt"
)

func main(){

                                message := make(chan string, 5)

                                message <- "hello world..."
                                message <- "my name is zhangbuda!!!"
                                message <- "how are you?"
                                message <- "are you fine?"
                                message <- "yeah, I'm fine!!"

                                for i:=0; i < 5; i++{

                                                                fmt.Println(<-message)
                                }
}
#运行结果
hello world...
my name is zhangbuda!!!
how are you?
are you fine?
yeah, I'm fine!!
static void APP_ADCConfig(void) { __HAL_RCC_ADC_CLK_ENABLE(); /* Enable ADC clock */ hadc.Instance = ADC1; hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; /* Set ADC clock*/ hadc.Init.Resolution = ADC_RESOLUTION_12B; /* 12-bit resolution for converted data */ hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; /* Right-alignment for converted data */ hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD; /* Scan sequence direction: forward */ hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV; /* Single Conversion */ hadc.Init.LowPowerAutoWait = DISABLE; /* Auto-delayed conversion feature disabled */ hadc.Init.ContinuousConvMode = DISABLE; /* Continuous mode disabled to have only 1 conversion at each conversion trig */ hadc.Init.DiscontinuousConvMode = DISABLE; /* Disable discontinuous mode */ hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; /* Software start to trig the 1st conversion manually, without external event */ hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; /* Parameter discarded because software trigger chosen */ hadc.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN; /* DR register is overwritten with the last conversion result in case of overrun */ hadc.Init.SamplingTimeCommon = ADC_SAMPLETIME_239CYCLES_5; /* The channel sampling time is 239.5 ADC clock cycles */ if (HAL_ADC_Init(&hadc) != HAL_OK) /* ADC initialization */ { APP_ErrorHandler(); } sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; sConfig.Channel = ADC_CHANNEL_4; if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) /* Configure ADC Channel */ { APP_ErrorHandler(); } if (HAL_ADCEx_Calibration_Start(&hadc) != HAL_OK) /* ADC Calibration */ { APP_ErrorHandler(); } }
07-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值