本帖最后由 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());
|