TI工程师:
我想请教一些flash问题。
1、cc3200内部没有flash,是外扩的1M flash,我想存储参数到flash,我应该如何确定flash地址呢?
2、这些flash api函数是操作外部扩展Flash吗?地址是0-1M吗?
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.
fs api函数在例程里可以执行,为什么我移植到其他例程里就不能执行了呢,需要做什么操作。我存参数的话,用文件系统太慢,我还是想直接操作flash,请问如何执行
你好:
如果我多个线程都使用了simplelink函数,是每一个线程都需要加”sl_start“吗?
不用,只需要一个,但是你需要做好同步和互斥。
在user.h里面有操作系统相关的函数定义,你可以参考一下。
想你说的是直接读取flash吗?目前是没有的,我们建议还是用文件系统的方式来操作,这样比较方便的。
你好,
你说的用文件系统方式操作file_operations,操作得是CC3200外部的存储么? 还是CC3200内部的呢
是的,是外部的FLASH,这个FLASH里面有一块区域是给用户文件存储的。可以创建,打开,读,写,关闭等操作。
你好,请问这里调用sl_Star为什么还需要同步和互斥。
我创建了两个任务,一个是HttpServerTask,SDK的example里的,另一个是自己移植的file operation task,这两个任务都需要调用sl_Start。
我发现这两个task里,任务优先级高的在调用sl_start时会卡死,然后任务优先级低的能够成功调用sl_start;
通过在线调试的方式调试的时候,没有这个现象,两个task里都能调用成功;但是用uniflask将程序烧到flash里之后,就会出这种现象。
不太想得通为什么,麻烦指导一下,谢谢!
建议不要在两个task里面这样做,你可以通过信号或者其它的什么方式来通信,在一个task里面维护simplelink的状态。
是的,这样是OK的,simplelink内部也是有互斥机制的。不过你的sl_Start不要在不同的task里面调用。
TI工程师:
你好!如果我要直接读取烧写进去的固件该怎么办?
如果直接读取Flash扇区可以通过偏移地址进行读写操作,那么用文件系统是否有特定的文件用于存放固件呢?
谢谢!
文件名是/sys/mcuimg.bin
你不能直接读FLASH扇区,必须要通过文件系统。
TI工程师:
您好,首先谢谢您的解答!
那如果我需要新建一个FirmWare.bin文件作为固件备份区用于刷入新的固件,这个固件的大小可能1MB甚至更大,试了一下,貌似创建不了超过64KB的文件。这样该如何解决?
谢谢!
还有就是,我们操作读写的时候,不会直接引用fs.h的sl_FsOpen、sl_FsRead、sl_FsWrite等这些函数,会把它们封装成我们想要的函数形式。这样问题就来了,比如说我板子上电初始化时候需要读取一些flash中的数据,如果调用自己封装好的函数根本起不来会死在一个地方,如果直接调用该函数里的内容就可以起来。这有点不合理。
如下:
void F2(void)
{
…………………………
lRetVal = sl_FsOpen(fileName, FS_MODE_OPEN_CREATE(1024, _FS_FILE_OPEN_FLAG_COMMIT | _FS_FILE_PUBLIC_WRITE), ulToken, &lFileHandle);
…………………………
lRetVal = sl_FsOpen(fileName, FS_MODE_OPEN_WRITE, ulToken, &lFileHandle);
lRetVal = sl_FsWrite(lFileHandle, Offset, (unsigned char *) pWriteBuffer, WriteBufferLen);
………………………………………………
lRetVal = sl_FsOpen(fileName, FS_MODE_OPEN_READ, ulToken, &lFileHandle);
lRetVal = sl_FsWrite(lFileHandle, Offset, (unsigned char *) pReadBuffer, ReadBufferLen);
}
1、//起不来
void FlashTask1(void * p)
{
F2();
}
2、//起得来
void FlashTask1(void * p)
{
…………………………
lRetVal = sl_FsOpen(fileName, FS_MODE_OPEN_CREATE(1024, _FS_FILE_OPEN_FLAG_COMMIT | _FS_FILE_PUBLIC_WRITE), ulToken, &lFileHandle);
…………………………
lRetVal = sl_FsOpen(fileName, FS_MODE_OPEN_WRITE, ulToken, &lFileHandle);
lRetVal = sl_FsWrite(lFileHandle, Offset, (unsigned char *) pWriteBuffer, WriteBufferLen);
………………………………………………
lRetVal = sl_FsOpen(fileName, FS_MODE_OPEN_READ, ulToken, &lFileHandle);
lRetVal = sl_FsWrite(lFileHandle, Offset, (unsigned char *) pReadBuffer, ReadBufferLen);
}