1、C语言函数的编写和调用
在工程中新建并添加一个C语言源文件(led.c),注意添加时要修改Makefile(在第一行依赖中添加led.o)
在汇编启动代码中设置好栈后,使用bl xxx(c函数名)的方式来调用C中的函数xxx(这里就是led_blink)
2、使用C语言来访问寄存器的语法
寄存器的地址类似于内存地址(IO与内存统一编址的),所以这里的问题是用C语言读写寄存器,就是用C语言来读写内存地址。用C语言来访问内存,就要用到指针。
unsigned int *p = (unsigned int *)0xE0200240; //等号右边的(unsigned int )是强制类型转换,目的是使符值等号两边类型一 p = 0x11111111; //致这个明白了再看这句代码实质是一句指针的初始化语句。
上面这两句其实可以简化为1句:((unsigned int )0xE0200240)这个代表p的话。((unsigned int )0xE0200240)前面加个()不就是p吗?所以上面两句可写成:((unsigned int *)0xE0200240)=0x11111111 我们程序中是把等号左边的直接定义为宏来用。
注:这两步是用C访问内存的模式化代码。理解(这里定义了一指针变量p,p的这个值就是0xE0200240。把寄存器地址理解成一个指针,这个指针指向了一个内存空间,这个内存空间就用P这个指针来指向。*p=0x11111111就是向p指向的内存地址写数据,也就是指针的访问)
3、神奇的volatile