14个职位/ 0新
最后一篇
daniel59
离线
最后见到:1年3个月前
加入:2016年1月8日04:34
数组过大无法编译

我用OLED数模转换工具创建了一个很大的数组,把它放到代码里的Keil无法生成。

请问有什么解决办法吗?我有外接一个1M的SPI FLASH。

设备:
CYibin
离线
最后见到:10个月3天前
工作人员
加入:2017年12月14日02:48
你好,

你好,

可预先将屏幕数据烧录到FLASH中。将该数组转化成HEX格式的文件,通过SmartSnippets工具箱烧录到FLASH的指定区域。程序运行之后,将其读出再送给屏幕即可。

daniel59
离线
最后见到:1年3个月前
加入:2016年1月8日04:34
您好!

您好!

想问一下如何转化为HEX文件呢?因为我是打算将固件直接烧录到FLASH去启动的,所以想问一下是否能修改KEIL的工程设置,使工程能够构建成功呢?

CYibin
离线
最后见到:10个月3天前
工作人员
加入:2017年12月14日02:48
你好,

你好,

数组转化为HEX可在网上搜索到一些小工具来完成。我介绍的这种方式,是比较容易上手的。

也有稍微复杂,但之后会比较方便引用的方式:

你也可通过修改KEIL的分散加载文件SCT,指定一个区域用于保存数组数据,并在程序中将该数组指定链接到该区域。但是,程序里对该数组的访问,还是要通过读写外部FLASH的方式来进行,并且,你需要知道该数组实际对应的在闪烁中的位置。

以上方式需要你先了解内存分配,KEIL链接文件配置等相关知识。

daniel59
离线
最后见到:1年3个月前
加入:2016年1月8日04:34
您好!

您好!

那若是将数组转化为HEX烧录到闪存里,而后我又要讲固件烧到FLASH里通过SPI启动程序,是应该先从0x20000000烧录固件再烧录FLASH吗?

CYibin
离线
最后见到:10个月3天前
工作人员
加入:2017年12月14日02:48
你好,

你好,

将数组起始地址分配到固件之后的位置,可通过六角合并工具,将两个十六进制文件合并为一个进行烧录

daniel59
离线
最后见到:1年3个月前
加入:2016年1月8日04:34
您好!了解,我先进行尝试,如果还有问题再来咨询,谢谢您!

您好!

了解,我先进行尝试,如果还有问题再来咨询,谢谢您!

CYibin
离线
最后见到:10个月3天前
工作人员
加入:2017年12月14日02:48
好的,有问题随时可跟帖讨论

好的,有问题随时可跟帖讨论

daniel59
离线
最后见到:1年3个月前
加入:2016年1月8日04:34
您好!

您好!

我的程序好像无法读取FLASH ......

我在想是否由于我板子上有一个SPI接口的加速度计芯片,而当时设计板子的时候又弄了2组SPI引脚,而导致FLASH无法读取?

引脚设定如下:
GPIO_ConfigurePin(ADXL_EN_GPIO_PORT,ADXL_EN_GPIO_PIN,OUTPUT,PID_SPI_EN,真正的);
GPIO_ConfigurePin(ADXL_CLK_GPIO_PORT,ADXL_CLK_GPIO_PIN,OUTPUT PID_SPI_CLK,FALSE);
GPIO_ConfigurePin(ADXL_DO_GPIO_PORT,ADXL_DO_GPIO_PIN,OUTPUT PID_SPI_DO,FALSE);
GPIO_ConfigurePin(ADXL_DI_GPIO_PORT,ADXL_DI_GPIO_PIN,INPUT,PID_SPI_DI,FALSE);
GPIO_ConfigurePin(SPI_EN_GPIO_PORT,SPI_EN_GPIO_PIN,OUTPUT,PID_SPI_EN,真正的);
GPIO_ConfigurePin(SPI_CLK_GPIO_PORT,SPI_CLK_GPIO_PIN,OUTPUT PID_SPI_CLK,FALSE);
GPIO_ConfigurePin(SPI_DO_GPIO_PORT,SPI_DO_GPIO_PIN,OUTPUT PID_SPI_DO,FALSE);
GPIO_ConfigurePin(SPI_DI_GPIO_PORT,SPI_DI_GPIO_PIN,INPUT,PID_SPI_DI,FALSE);

CYibin
离线
最后见到:10个月3天前
工作人员
加入:2017年12月14日02:48
你好,

你好,

SPI外设只有一个。需要你软件上分时使用这两个硬件接口。

daniel59
离线
最后见到:1年3个月前
加入:2016年1月8日04:34
您好!

您好!

想问一下,是否能写1MB大的程序烧入闪存进行启动?还是说程序最大只能84KB?

CYibin
离线
最后见到:10个月3天前
工作人员
加入:2017年12月14日02:48
你好,

你好,

DA1458x系列芯片程序需要拷贝到RAM中运行。

580具有50KB的RAM,所以一般采用代码(32KB)+数据(12KB)的组合方式。

585具有96KB的RAM,所以一般采用代码(64KB)+数据(32KB)的组合方式。

DA1468x系列芯片程序可通过QSPI接口,从FLASH运行;故代码量可不受RAM大小的限制。

daniel59
离线
最后见到:1年3个月前
加入:2016年1月8日04:34
您好!

您好!

感谢回复。

那就是说如果我是580 + 1MB的闪存,从闪存启动的话,也只能用50KB,剩下的只能用作数据存储是吗?

CYibin
离线
最后见到:10个月3天前
工作人员
加入:2017年12月14日02:48
是的

是的