查看: 720|回复: 0

【GoRK3288】2.Go语法简要说明及GoRK3288结构

[复制链接]
  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-5-29 14:52:15 | 显示全部楼层 |阅读模式
    分享到:
    Go语言的语句很简单,写起来像是动态语言那样简单。不过虽说代码符号简单,但是刚刚接触的时候却是有些不适应,这里就先把使用 GoRK3288库 的时候需要用到的语法列举一下,其他高深的东西以后再去学习吧。

        1.操作符:
            +、-、*、/、%、&、|、^、<<、>>、==、!=、|= 等这些和C语言是一样的,不过在取反的时候就不是~符号了,而是^。跟亦或是同一个符号,怎么区分呢?单目操作是取反,双目操作是亦或。另外要将某一位置0的话 &= ^x是不对的,而是 &^= x,切记。
        2.变量:
            变量的声明可以用var来标识,如var i int = 0,变量名在前,类型在后,而且语句的结束不需要分号。对多个变量 赋初值var i, j = 0, 0。
            和某些动态语言类似,Go的变量可以不需要事先声明,可以根据函数的返回值自动判断变量的类型。如
    i := GetIndex()。根据函数GetIndex()返回值的类型自动赋值给变量i,不过需要注意的是操作符变为 :=了,而对于已经声明的变量直接使用 = 来赋值。
        3. 返回值:
            返回值是Go语言和其他语言变化最大的地方之一,Go语言支持多返回值。例如:
            func GetInfo() (Index int, Info string, Result float32) {}
            一下子返回了三个值,而不需要再去定义个结构体,方便了很多。而且如果只想使用一个返回值而不关心其他的值的时候,可以这样接收:index, _, _ := GetInfo(),实在太方便了。
        4.线程(协程):
            前面说过,Go对于高并发做的很好,而高并发是通过多线程来实现的。在Go里使用的所谓线程,其实是一种比线程资源开销更小的协程,仅仅比堆栈占用的资源高一点点,所以理论上可以创建几十万个协程来并行工作。当然这只是理论上,不过创建几千个上万个协程一般足够使用了。
        5.通道:
            Go语言提供的消息通信机制被称为channel,可以在语言级别提供的goroutine间的通信方式。“不要通过共享内存来通信,而应该通过通信来共享内存。”,这句话说的就是通道在Go语言中的作用。通道的使用方法多种多样,一般先是定义个通道,一方写,另一方读,而读的一方在有消息到达前是阻塞的。例如:
            ch := make(chan int) //创建通道
            ch <- 1 //写消息到通道
            msg := <- ch //从通道读消息到一个变量中
            而其他更多的用法是 select ,暂时用不到就不说了,希望了解详细用法的话请查询手册。
        6. 流程控制:
            if x == y { return } //条件判断部分没有()
            没有while ... do ...或 do... while ...,Go语言里只有for {}
            switch (x) {
              case A:
              case B, C, D: fallthrough
              default: return
            }
            switch 不像C中用break来结束每一个case,如果需要的话使用fallthrough来达到这种效果。
        7.Go关键字:
            break case chan const continue default defer else fallthrough for func go goto if import interface map package range return select struct switch type var
        8.Go类型:
            byte int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float32 float64 complex64 complex128 uintptr string
        9.工程文件:
            Go语言其实没有工程文件这个东西,类似的概念其实就是文件夹,根据文件夹包括的go文件以及引用情况来决定是否在一个工程内。但是每一个工程都必须有一个入口点,必须是package main来开头的,func main() {} 作为主函数所在的文件。有了这个文件才能正确的编译和运行。
        暂且想到这么多,其他用到的东西以后再补充。

        语法大概了解了,再来看看GoRK3288项目工程文件的结构。
        目前包括的文件有:
        1.RK3288.go
        2.GRF.go
        3.GPIO.go
        4.PWM.go
        5.TSADC.go
        6.WDT.go
        ....
        首先RK3288.go文件是一个基础文件, 对于内存的映射和释放是由它来完成的。这个文件本身和RK3288没有关系,一般不需要使用,只是在工程的开始时需要调用一句 defer RK3288.FreeRK3288() 用于在程序退出时释放资源。
        其次是GRF.go文件,它的作用是设置RK3288每个端口的功能复用。当然已经被封装好,不需要直接调用。
        这两个文件对工程而言是必须的,缺少将不能编译。其他的文件功能和文件名是一样的,不用多说,用不到的可以不包括在工程中。
        每个文件的使用方法后面陆续说明。

        GoRK3288库请在https://github.com/tjCFeng/GoRK3288下载。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-27 03:37 , Processed in 0.112832 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.