[原创]
【GoRK3288】2.Go语法简要说明及GoRK3288结构
嵌入式系统
 
2861 人阅读
|
1 人回复
|
2015-05-20 
 
 
 
 
TA的每日心情  | 奋斗 2022-9-16 05:52 | 
|---|
 
  签到天数: 1368 天 连续签到: 1 天 [LV.10]以坛为家III 
版主 
 
	- 积分
 - 6980
 
 
       
 
 
 | 
 
 
    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下载。 
 
【GoRK3288】1.Rockchip RK3288, GO!GO!!GO!!! 
https://www.cirmall.com/bbs/thread-41838-1-1.html 
【GoRK3288】3.GPIO操作方法(1) 
https://www.cirmall.com/bbs/thread-41848-1-1.html 
【GoRK3288】4.GPIO操作方法(2) 
https://www.cirmall.com/bbs/thread-41882-1-1.html 
【GoRK3288】5.PWM操作方法 
https://www.cirmall.com/bbs/thread-41894-1-1.html 
【GoRK3288】6.TSADC操作方法 
https://www.cirmall.com/bbs/thread-41926-1-1.html 
【GoRK3288】7.WatchDog操作方法 
https://www.cirmall.com/bbs/thread-41944-1-1.html 
 
 
 
 |   
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
TA的每日心情  | 奋斗 2016-8-15 09:28 | 
|---|
 
  签到天数: 222 天 连续签到: 1 天 [LV.7]常住居民III 
状元 
 
 
	- 积分
 - 6153
 
 
  
 
 
 | 
沙发
 
 
奋斗哥 
 
发表于 2015-5-20 09:43:51
|
只看该作者
 
 
 
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 |