This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
您好!
首先、我想说的是、我对 CCS 的了解仍然很新、 但是、我目前正在尝试将 main 函数从 TI Resource Explorer 中名为 nvsexternal.c 的示例代码执行到代码的修改版本、也可以从名为"simple_broadcaster "的资源浏览器执行此操作、该资源浏览器使用 SPI 读取、写入和擦除 TI-CC2640上的外部存储器。 我之前成功地单独运行了两个程序、但是现在在将这个 SPI 函数插入主代码时、我收到了这个错误:
"程序将不能放入可用的内存中。 ".TI.bound:nV_flash"大小为0x1000的段放置对齐失败、与".TI.bound:flashBuf$9"、大小为0x4000 (第0页)空:程序将不适合可用存储器。 ".TI.bound:nV_flash"大小为0x1000的段放置对齐失败、与".TI.bound:flashBuf$9"大小0x4000 (第0页)"重叠
以下是 SPI 的主要函数:
/
* define (nvsexternal.c)
#include
#include
#include
/*驱动程序头文件*/
#include
#include
/*示例/板头文件*/
#include "Board.h"
#define footer ======================================================================================== "
放置在 RAM 中的/*缓冲器,用于保存从非易失性存储器读取的字节。 *
静态字符缓冲区[16];
静态常量字符签名[]=
{"SimpleLinktest..."};
/*********
void NVS_func (void)
{
NVS_Handle nvsHandle;
NVS_Attrs 区域 Attrs;
NVS_Params nvsParams;
Display_Handle displayHandle;
/*
*在 LaunchPad 上唤醒外部闪存。 默认情况下、它处于关闭状态
但可以通过切换 SPI 芯片选择引脚打开。
*
#ifdef Board_wakeUpExtFlash
Board_wakeUpExtFlash();
#endif
display_init();
NVS_init();
DisplayHandle = Display_open (Display_Type_UART、NULL);
if (displayHandle == NULL){
/* Display_open()失败*/
while (1);
}
NVS_PARAMS_INIT (_nvsParams);
nvsHandle = NVS_open (Board_NVSEXTERNAL、_nvsParams);
if (nvsHandle == NULL){
display_printf (displayHandle、0、0、"NVS_open () failed.");
返回;
}
display_printf (displayHandle、0、0、"\n");
/*
*这将填充具有特定属性的 NVS_Attrs 结构
*连接到 NVS_Handle、例如区域基地址、区域大小、
和扇区大小。
*
NVS_getAttrs (nvsHandle、®ionAttrs);
/*显示 NVS 区域属性。 *
Display_printf (displayHandle、0、0、"扇区大小:0x%x"、
regionAttrs.sectorSize);
Display_printf (displayHandle、0、0、"区域大小:0x%x\n"、
regionAttrs.regionSize);
/*
*将"sizeof (signature)"字节从 NVS 区域基地址复制到中
*缓冲区。
*
NVS_READ (nvsHandle、0、(void *) buffer、sizeof (signature));
/*
*确定 NVS 区域是否包含签名字符串。
*将字符串与复制到缓冲区中的内容进行比较。
*
if (strcmp ((char *) buffer、(char *) signature)==0){
/*将缓冲区从闪存复制到控制台。 *
display_printf (displayHandle、0、0、"%s"、buffer);
Display_printf (displayHandle、0、0、"擦除 SPI 闪存扇区...");
/*擦除整个闪存扇区。 *
NVS_ERASE (nvsHandle、0、regionAttrs.sectorSize);
}
否则{
/*在 NVS 区域未找到签名。 *
Display_printf (displayHandle、0、0、"正在将签名写入 SPI 闪存...");
/*
*将签名写入存储器。 之前擦除闪存扇区
执行写入操作。 这由指定
* NVS_WRITE_ERASE。
*
NVS_WRITE (nvsHandle、0、(void *) signature、sizeof (signature)、
NVS_WRITE_ERASE | NVS_WRITE_POST_VERIFY);
}
display_printf (displayHandle、0、0、"复位器件。");
Display_printf (displayHandle、0、0、页脚);
返回;
}
/
下面也是 simple_broadcaster .c 文件中的内存分配:
我之前曾尝试整体减小代码的大小、并删除了 display_print 函数、认为它只是程序太大、但现在我不确定从哪里开始解决此问题。 如果对这一问题提供任何指导,将不胜感激。
如果我还能提供任何其他帮助,我会很高兴地这样做:)
谢谢!
-Steven