3. 简单的就是信号量了,全局变量。
总结下3个问题:
bf609的内存可以分为三部分:L1 L2 L3。
其中L1对于两个核心来说是独立的, 两个核心有自己的L1。coreA的L1,coreB是无法访问到的。
而L2和L3就是共享的。两个核都可以访问的到。
为了防止访问冲突。cces在创建工程的时候就会自动的生成两个和内存相关的文件。
startup_ldf目录下的app_cplbtab.c和app.ldf文件。
这两个文件对内存进行了划分。两个和的project目录下都有对应的文件。
其中app_cplbtab.c负责管理当前内核可以访问的内存区域。以及对应内存区域的访问方式。
比如core0中一段描述:
{0x00000000, (ENUM_DCPLB_DATA_16MB | CACHE_MEM_MODE)},
{0x01000000, (ENUM_DCPLB_DATA_16MB | CPLB_DNOCACHE)},
{0x02000000, (ENUM_DCPLB_DATA_16MB | CACHE_MEM_MODE)},
{0x03000000, (ENUM_DCPLB_DATA_16MB | CACHE_MEM_MODE)},
{0x04000000, (ENUM_DCPLB_DATA_16MB | CACHE_MEM_MODE)},
{0x05000000, (ENUM_DCPLB_DATA_16MB | CPLB_DNOCACHE)},
{0x06000000, (ENUM_DCPLB_DATA_16MB | CPLB_READONLY_ACCESS)},
{0x07000000, (ENUM_DCPLB_DATA_16MB | CPLB_READONLY_ACCESS)},
这一共是128MB的内存空间。
CACHE_MEM_MODE 开CACHE
CPLB_DNOCACHE 关cache
CPLB_READONLY_ACCESS 只对的。
前两个就不说了,第三个表明,该区域的内存对于core0来说是只读的,不可写。如果写的话就会产生错误。
一个cplb错误。debug时候控制台就会是红字提示。(不过貌似DMA可以随意访问到)。