我用OLED数模转换工具创建了一个很大的数组,把它放到代码里的Keil无法生成。
请问有什么解决办法吗?我有外接一个1M的SPI FLASH。
你好,
可预先将屏幕数据烧录到FLASH中。将该数组转化成HEX格式的文件,通过SmartSnippets工具箱烧录到FLASH的指定区域。程序运行之后,将其读出再送给屏幕即可。
您好!
想问一下如何转化为HEX文件呢?因为我是打算将固件直接烧录到FLASH去启动的,所以想问一下是否能修改KEIL的工程设置,使工程能够构建成功呢?
数组转化为HEX可在网上搜索到一些小工具来完成。我介绍的这种方式,是比较容易上手的。
也有稍微复杂,但之后会比较方便引用的方式:
你也可通过修改KEIL的分散加载文件SCT,指定一个区域用于保存数组数据,并在程序中将该数组指定链接到该区域。但是,程序里对该数组的访问,还是要通过读写外部FLASH的方式来进行,并且,你需要知道该数组实际对应的在闪烁中的位置。
以上方式需要你先了解内存分配,KEIL链接文件配置等相关知识。
那若是将数组转化为HEX烧录到闪存里,而后我又要讲固件烧到FLASH里通过SPI启动程序,是应该先从0x20000000烧录固件再烧录FLASH吗?
将数组起始地址分配到固件之后的位置,可通过六角合并工具,将两个十六进制文件合并为一个进行烧录
了解,我先进行尝试,如果还有问题再来咨询,谢谢您!
好的,有问题随时可跟帖讨论
我的程序好像无法读取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);
SPI外设只有一个。需要你软件上分时使用这两个硬件接口。
想问一下,是否能写1MB大的程序烧入闪存进行启动?还是说程序最大只能84KB?
DA1458x系列芯片程序需要拷贝到RAM中运行。
580具有50KB的RAM,所以一般采用代码(32KB)+数据(12KB)的组合方式。
585具有96KB的RAM,所以一般采用代码(64KB)+数据(32KB)的组合方式。
DA1468x系列芯片程序可通过QSPI接口,从FLASH运行;故代码量可不受RAM大小的限制。
感谢回复。
那就是说如果我是580 + 1MB的闪存,从闪存启动的话,也只能用50KB,剩下的只能用作数据存储是吗?
是的
你好,
可预先将屏幕数据烧录到FLASH中。将该数组转化成HEX格式的文件,通过SmartSnippets工具箱烧录到FLASH的指定区域。程序运行之后,将其读出再送给屏幕即可。
您好!
想问一下如何转化为HEX文件呢?因为我是打算将固件直接烧录到FLASH去启动的,所以想问一下是否能修改KEIL的工程设置,使工程能够构建成功呢?
你好,
数组转化为HEX可在网上搜索到一些小工具来完成。我介绍的这种方式,是比较容易上手的。
也有稍微复杂,但之后会比较方便引用的方式:
你也可通过修改KEIL的分散加载文件SCT,指定一个区域用于保存数组数据,并在程序中将该数组指定链接到该区域。但是,程序里对该数组的访问,还是要通过读写外部FLASH的方式来进行,并且,你需要知道该数组实际对应的在闪烁中的位置。
以上方式需要你先了解内存分配,KEIL链接文件配置等相关知识。
您好!
那若是将数组转化为HEX烧录到闪存里,而后我又要讲固件烧到FLASH里通过SPI启动程序,是应该先从0x20000000烧录固件再烧录FLASH吗?
你好,
将数组起始地址分配到固件之后的位置,可通过六角合并工具,将两个十六进制文件合并为一个进行烧录
您好!
了解,我先进行尝试,如果还有问题再来咨询,谢谢您!
好的,有问题随时可跟帖讨论
您好!
我的程序好像无法读取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);
你好,
SPI外设只有一个。需要你软件上分时使用这两个硬件接口。
您好!
想问一下,是否能写1MB大的程序烧入闪存进行启动?还是说程序最大只能84KB?
你好,
DA1458x系列芯片程序需要拷贝到RAM中运行。
580具有50KB的RAM,所以一般采用代码(32KB)+数据(12KB)的组合方式。
585具有96KB的RAM,所以一般采用代码(64KB)+数据(32KB)的组合方式。
DA1468x系列芯片程序可通过QSPI接口,从FLASH运行;故代码量可不受RAM大小的限制。
您好!
感谢回复。
那就是说如果我是580 + 1MB的闪存,从闪存启动的话,也只能用50KB,剩下的只能用作数据存储是吗?
是的