用户希望创建一个将在 F28335和 F28333上运行的单个项目。 他们希望软件在运行时使用 PARTID 寄存器来确定所需的设置。 闪存 API 库存在问题。 他们希望将这两个库合并到项目中、并决定在运行时使用哪一个库。
我认为这是可能的、但需要确认。
他们需要做的第一件事是调用特定的顶层器件函数、而不是#define common name 函数。 例如,调用 Flash28333_Eras()而不是 Flash_Eras()。 顶级 函数都列在 Flash2833x_API_Library.h 文件中。 例如:
#IF FLASH_F28333
#define Flash_Erase (a、b) Flash28333_Erase (a、b)
#define Flash_Program (a、b、c、d) Flash28333_Program (a、b、c、d)
#define Flash_Verify (a、b、c、d) Flash28333_Verify (a、b、c、d)
#define Flash_ToggleTest (a、b) Flash28333_ToggleTest (a、b)
#define Flash_DepRecover () Flash28333_DepRecover ()
#define Flash_API 版本十六进制() Flash28333_API 版本十六进制()
#define Flash_API 版本() Flash28333_API 版本()
#endif
其次、顶级函数调用 F28333和 F28335库中同名的子函数。 当你构建项目时、这些显示在.map 文件中。 例如:
_Fl28x_ClearLoop
_Fl28x_ClosePulse
_Fl28x_CompactPulse
_Fl28x_CompactVerify
_Fl28x_delay
_Fl28x_DisableInt
_Fl28x_DisableNMI
_Fl28x_EnterCmdMode
_Fl28x_ErasePulse
_Fl28x_EraseVerify
_Fl28x_FlashRegSleep
_Fl28x_LeaveCmd 模式
_Fl28x_MaskAll
_Fl28x_OpenPulse
_Fl28x_ProgPulse
_Fl28x_ProgVerify
_Fl28x_RestoreInt
_Fl28x_WatchDogDisable
这些库将从项目中首先链接的库(F28335或 F28333)中被拉入。
问题:这两个库中的函数是否相同? 我认为是这样。
最后、CPU_RATE 是#defined Flash2833x_API_Config.h 我假设这必须 作为一个参数传递到上述一个子函数(例如_FL28x_delay)、因为 API 库已经编译、用户从未接触过除#define 之外的 CPU_RATE。 用户将无法在运行时更改 CPU_RATE。 为了解决这一问题、他们需要在闪存编程期间使两个器件以相同的速度运行。 例如、假设 F28335的 CLKIN 为30MHz、而 F28333的 CLKIN 为20MHz、它们在闪存操作期间都可以以60MHz 的频率运行。 因此、CPU_RATE 将设置为60MHz。
------
添加了4/18/17 1031AM: 更正了! 看起来 CPU_RATE 用于计算 SCALE_FACTOR、然后由用户将换算系数分配给变量:
Flash_CPUScaleFactor = scale_factor;//初始化闪存 API 时钟速率缩放
因此、用户可以进行修改、使其具有 scale_facter_28335和 scale_facter_28333、并在运行时分配正确的一个。 无需以相同的速度运行两个器件。
------
有人能确认我的想法吗?
此致、
David