本帖最后由 vsfopen 于 2018-7-24 20:15 编辑
VSF脚本中,最近增加了指针操作,可以通过指针操作,来实现MCU寄存器的读写,下面是demo:
- const GPIOA_BASE = 0x40010800;
- const CRL = 0, CRH = 1, IDR = 2, ODR = 3, BSRR = 4, BRR = 5;
- var GPIOA = pointer_create(GPIOA_BASE, 4);
- var i = 0;
- while (i < 5)
- {
- print("GPIOA[", i, "] = ", GPIOA.get(i), "\r\n");
- i = i + 1;
- }
- gpio_config(0, 0, GPIO_OUTPP);
- while (1)
- {
- GPIOA.set(BSRR, 1);
- timer_delayms(500);
- GPIOA.set(BRR, 1);
- timer_delayms(500);
- }
这里,pointer_create是新建一个指针实例,指向GPIOA寄存器。pointer_create的第一个参数是物理地址,第二个参数的长度(1代表8位,2代表16位,4代表32位)。
GPIOA.get调用读数据方法,读取指针[偏移]的值,实际偏移量和长度有关。
GPIOA.set调用写数据方法,同样可以指定便宜,GPIOA.set(BSRR, 1)就是设置GPIOA_BSRR寄存器为1。
pointer_create还可以从buffer中建立指针:- var buf = buffer_create(100);
- var p = pointer_create(buf, 0, 1);// char *p = &buf[0]
- var pos = 0;
- while (pos < buf.get_size())
- {
- p.set(pos, 0);
- pos = pos + 1;
- }
上面的代码,可以简化为:- var buf = buffer_create(100);
- memset(buf, 0, buf.get_size());
|