对C2000了解不多,使用起来应该有很多注意的地方
调试之前没做太多准备工作,调试过程中遇到了很多问题
比如第一个问题是无法在代码里创建一个大数组
4个uint16_t的数据如果每个长度设置为1024就会在调试的时候正常,然后复位后就会无法启动
如果长度是512就正常
代码
#pragma DATA_SECTION(adcADataBuffer, "ramgs0");
#pragma DATA_SECTION(adcBDataBuffer, "ramgs1");
#pragma DATA_SECTION(adcCDataBuffer, "ramgs2");
#pragma DATA_SECTION(adcDDataBuffer, "ramgs3");
CMD
RAMGS0 : origin = 0x00C000, length = 0x002000
RAMGS1 : origin = 0x00E000, length = 0x002000
RAMGS2 : origin = 0x010000, length = 0x002000
RAMGS3 : origin = 0x012000, length = 0x002000
RAMGS4 : origin = 0x014000, length = 0x002000
RAMGS5 : origin = 0x016000, length = 0x001000
ramgs0 : > RAMGS0, PAGE = 1
ramgs1 : > RAMGS1, PAGE = 1
ramgs2 : > RAMGS2, PAGE = 1
ramgs3 : > RAMGS3, PAGE = 1
后来没办法直接使用指针访问这些内存问题好像解决
另一个问题是我在把ADC数据通过字节的方式发送到PC时数据总是错的
后来我先把内存按照uint16_t的位数写入递增数据
然后我把使用uint8_t 的指针读取0x0000E000地址,按照我理解读取的数据应该是00,00,00,01,00,02,00,03
但实际读取到的数据是01,02,03,04
开始的时候我怀疑是指针没弄对,后来发现不是这个问题
然后把CCS查看的格式由16bit改成8bit查看时发现我读取到的数据没错
想到数据手册里的表格,数据的长度是16位的,也就是说每一个地址对应一个16位数据,如果使用int8_t的指针相当于把高8位给丢弃了,所以读到的数据是00,01,02,03,04应该就是这个问题
|