本帖最后由 gcxzhz 于 2014-3-22 17:06 编辑
用来做的旋转led
用m0516的主控芯片 只是操作io口
首先保证数据不会超过芯片rom
数组过大程序无法运行,假设临界值为n 数组1的大小n1超过 n 则程序无法运行, n1《 n时可以运行,数组2的大小为n2,当n1+n2》 n时函数,仍无法运行,函数执行两次。当2×n1 》n时 调用两次 芯片仍然无法运行
具体如下
void roll_left(uint16_t *p,uint16_t size)
运行 roll_left(wfcsu,wfcsu_size); wfcsu是个数组 ,我用的指针表示 。 wfcsu_size是数组wfcsu的大小
当wfcsu_size 》n(临界值)函数无法运行,
wfcsu1也是个数组 。 wfcsu1_size是数组wfcsu1的大小
当 wfcsu1_size + wfcsu_size 》n时
roll_left(wfcsu,wfcsu_size);
roll_left(wfcsu1,wfcsu1_size);
芯片无法运行
单独运行其中一个没问题
当 wfcsu1_size + wfcsu_size 《n时
两个都没问题
本来都验证好了。函数也调好了,硬件准备封装的时候,手残增大数组数据后 就出现问题了
int main(void)
{
SYS_Init(); //初始化
IO_Init();
P1->DOUT = 0; //点亮上下显示的蓝灯
delaytime=65535;
while( delaytime--);
while(1)
{
P2->DOUT = 0xff;
P0->DOUT = 0xff;
delaytime=65535;
while( delaytime--);
while(1)
{
//下面是花样显示函数
//函数都是经过测试,按照自己预期的结果运行的
roll_up(wfcsu1,wfcsu1_size);
flash(wfcsu1,wfcsu1_size);
roll_left(wfcsu,wfcsu_size); //wfcsu是个数组 wfcsu_size是数组大小 以下同样
roll_left(wfcsu5,wfcsu5_size);
roll_left(wfcsu1,wfcsu1_size);
}
}
}
上面是主函数 最下面3行 单独运行其中任何一个都没问题
运行roll_left(wfcsu,wfcsu_size);
roll_left(wfcsu5,wfcsu5_size);
因为wfcsu5_size+wfcsu_size > n了不行
运行roll_left(wfcsu,wfcsu_size);
roll_left(wfcsu1,wfcsu1_size);
或
运行roll_left(wfcsu1,wfcsu1_size);
roll_left(wfcsu5,wfcsu5_size);
因为wfcsu5_size+wfcsu1_size<n
wfcsu_size+wfcsu1_size<n 都可以正常运行
下面是现有成果
蓝色的是锂电池充电板 红色那个是升压板都是买的现成的 其他是自己买了些材料 自己做的,焊接m0的板子是同学做毕业设计开的,仿真器是坛子里送的m058s上掰成两半搞的
|