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.
您好!
我正在编写具有以下配置的应用程序:
CPU 访问引导 ROM 中的闪存 API 代码。
2802x_FlashAPI_BootROMSymbols_v2.01.lib 已链接
SECTIONS { /* Allocate program areas: */ /* The Flash API functions can be grouped together as shown below. The defined symbols _Flash28_API_LoadStart, _Flash28_API_LoadEnd and _Flash28_API_RunStart are used to copy the API functions out of flash memory and into SARAM */ .cinit : > BOOT_IMAGE PAGE = 0 .pinit : > BOOT_IMAGE, PAGE = 0 .text : > BOOT_IMAGE PAGE = 0 codestart : > BEGIN PAGE = 0 ramfuncs : LOAD = BOOT_IMAGE, RUN = RAMM1, LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd), RUN_START(_RamfuncsRunStart), PAGE = 0
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart); MemCopy(&RamTimerfuncsLoadStart, &RamTimerfuncsLoadEnd, &RamTimerfuncsRunStart);
闪存扇区 A -->用户引导加载程序
闪存扇区 B、C、D ->应用程序代码
用户引导加载程序具有以下特性:
-读取并写入扇区 B、C、D。 不是
- UART protocoll ,中断驱动
-基本定时器中断
-不使用闪存 API 回调
通常、在引导加载程序中、我会将所有内容都放在 RAM 中。
#pragma CODE_SECTION(mainLoop, "ramfuncs");
我为每个函数和 ISR 例程重复此代码。
第一个问题是:如果 Flash_API 驻留在 ROM 中、我真的需要将所有内容放在 RAM 中吗?
尤其是在我写入不同的扇区时。
也许我只需要在 RAM 中放置 ISR?
第二个问题是:CODE_SECTION 只会在 RAM 中放置命名的函数、还是在其实现中调用的函数?
您好!
Unknown 说:如果 Flash_API 驻留在 ROM 中、我真的需要将所有内容放在 RAM 中吗?
FLASH_API 可从 ROM 或 RAM 运行、而不是闪存。 从 ROM 运行 API 的唯一好处是、无需额外步骤即可复制函数以执行它们。
code_section 将只能在 RAM 中放置命名函数或在其实现中调用的函数?
只有命名的函数 code_section 不是递归副本。
因此我无需将我自己调用 Flash_API 的代码放入 RAM 中?
您好!
不、如果您需要、可以直接从 ROM 中运行它。 此器件在 ROM 中具有闪存 API、所以就是这样。
谢谢你。 不过为了确保:如果我需要访问阵列、例如
const Uint16 Buffer[WORDS_IN_FLASH_BUFFER]; FLASH_ST FlashStatus; void main(void) { Flash2802x_Erase(SECTORB | SECTORC | SECTORD, &FlashStatus); } // 1ms interrupt void _ISR_Timer_1(void) { // there is not limition on code on reading buffer }
我没有因擦除扇区 B、C、D 而施加的限制?
来自"TMS320F2802x PiccoloTM A 修订版 A 闪存 API"
在这些器件上、只有一个闪存阵列。 闪存架构强制要求闪存
一次只能执行一个操作。 由于这一限制、在擦除、编程或验证
闪存、代码本身不能执行并且不能从闪存中提取数据。
您好!
如果需要访问阵列,例如
如果您意味着您是否可以擦除多个闪存扇区、则根据文档可以执行此操作(它们不会 同时擦除、但都将被擦除):