求教dsp的LED灯编码程序。。。。。
时间:10-02
整理:3721RD
点击:
TOP2812例程关于LED灯有这么一段编码:unsigned int *LedADDR = (unsigned int *) 0x2800; //8个发光二极管寄存器地址LedCode[9]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF};
*LedADDR = LedCode[Count]; //依次点亮灯,置相应位低电平
--------------------------------------------------------------------------------------哪位大神知道第一行红色部分是怎么来的啊 0x2800这个寄存器地址是怎么来的啊我新手。求大神指教。不胜感激。
*LedADDR = LedCode[Count]; //依次点亮灯,置相应位低电平
--------------------------------------------------------------------------------------哪位大神知道第一行红色部分是怎么来的啊 0x2800这个寄存器地址是怎么来的啊我新手。求大神指教。不胜感激。
0x2800是属于硬性指定的地址,这是一种不标准的 C 编程方式;
你想将数据放在啥地方,就可以在存储区随便选一个地址,就将你的数据安排放在这里;
程序很小时,可以使用这样的方式;大型程序最好不要这样,因为你的编译器并不知道你使用了这个地址,他在编译时分配其他数据的存储空间时,会和你的这些数据造成重叠,引起程序混乱。
奥,但为什么我把0x2800改为0x1800就不对了呢 。
还有程序大时怎么编啊啊。谢谢回答
0x2800改为0x1800就不对了,可能是其他程序段也使用了0x1800;也可能0x1800这个地址根本在硬件上就不是存储空间,或者0x1800处于只读区域内(说这句是因为我不清楚TOP2812);
要想编出来的程序兼容性好,就不要使用硬性指定地址的方法来分配存储空间;而应使用标准的C语句定义变量、数据,由编译器自动分配。
奥奥。那怎么使用标准的C语句定义变量、数据,由编译器自动分配储存空间啊。
就是不用指定地址这些语句啊;
比如,要定义一个在同一个原文件范围内访问的变量,在文件开头部分定义就可以了;