主题中讨论的其他器件:BOOST-IR、 MSP430FR4133
您好!
我正在尝试在 MSP430FR4133-BOOSTIR 封装的基础上执行一个项目、其中控制器能够保存多组 IR 信号/代码。 这样、我就可以在不同的设置之间切换、发送/接收相应的 IR 信号以及控制不同的家用电器。
但是、问题在于:
- FR4133只有16kB 的 FRAM、其中一些用于变量和代码。
- 每组 IR 代码需要:
- 2 (无符号整型的字节)* 14 (要编码的按钮)* 255 (存储的最大时间间隔数)= 7140字节!!! 每组(即使只有2组需要14.3KB 的存储器)
- 示例代码通过使用计时器接收、存储和重复2个"高"和"低"之间的时间间隔来存储信息-> Q1:是否有其他方法来存储此信息、从而减少所需的存储?
主要问题:如何"增加"可用于所需存储的内存?
我考虑了几个变通办法,其中一些已经尝试但失败(因此,我在这里寻求帮助):
1.将部分程序存储器移至 RAM 或闪存
这是我首先尝试做的事情之一-但我无法完全理解链接器文件上的文档。
- 到目前为止、除了我最初在 FRAM 中的代码、常量和 PERSISTENT pragma 之外、我还能够将所有内容移动到 RAM 中、从而节省了一小部分60字节。
- 尝试将代码移动到 RAM 会导致"program will not fit into available memory" 错误。 (根据内存分配、.text 总共约为3.3kB)
- 尝试将常量移动到 RAM 编译但会导致 ISR_TRAPS
- 根据其他论坛的建议、我尝试将.text 和.const 移至闪存、但 FR4133似乎没有闪存?
-> Q2:如何成功地将 部分代码(.text、.const)分区到 RAM 或闪存?
2.存储信息/压缩红外信息的另一种方法
起初、我认为我可以将信息减少近1/4、因为我假设255个计数是 overkill、只有 unsigned char 是存储时间间隔所必需的。
在使用 A/C 信号进行测试后、我出了问题-不知怎么说、这两者都是必要的。
--> Q3:还有其他巧妙的方法压缩、存储或表示我没有想到的必要 IR 信息?
3.使用另一个 MSP430作为"外部存储"
这是一种我可以想象的工作方式、但尚未尝试过。
--> Q4:是否可以通过 SPI 或 I2C 在2个相似的 MSP430之间通信和传输 FRAM 信息?
4. SD 卡 BoosterPack
最后一种选择是 overkill、可能与 BOOST-IR BoosterPack 不兼容(它占用所有公头引脚)
感谢您的提前帮助!
塞缪尔



