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.

[参考译文] MSP430F5638:存储大型阵列、并将图像转换为 C 数据阵列

Guru**** 663810 points
Other Parts Discussed in Thread: MSP430F5638
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1212183/msp430f5638-store-large-array-and-convert-image-to-c-data-array

器件型号:MSP430F5638

使用运行良好的 MSP430F5638设计了定制 SBC。 使用480x272像素色 TFT LCD、该 LCD 也很适合设置颜色、显示文本(作为图形字体)和执行 XY 图。 我尝试在 LCD 上显示一个 jpg 图像-并使用 LCD Image Converter 将一个小图像转换为一个无符号整数组。  映像.h 文件的大小为3MB。

阵列尺寸正确:480 x 272 = 130、560像素、其中每个像素需要一组3个十六进制数- 3 x 130、560 = 391、680

Static const unsigned int BE950020[391680]={

  0x00ED、0x0074、0x000c、0x00f9、0x007b、 0x000d、0x00fe、0x0080、0x0008、0x00f8、 0x0081、0x0003、0x00df、0x0075、0x0000、 0x00c9、0x0066、

...

...

};

 

如何才能为具有256KB 闪存+全局变量和16KB RAM 的 MCU 构建此应用程序? 最初我收到错误#69 Array is too large (#69阵列太大)。 将存储器模型从 Large / Restricted / Globals 更改为 Large / Large / Globals、并将数组类型从 unsigned long int 更改为 unsigned int -它会构建并加载到 SBC ok。 只是将其加载到闪存中并丢弃其余部分吗? 垃圾图像显示后,我可以改变背景颜色,所以程序仍然运行正常,只是图像显示是垃圾。  

液晶屏上充满了垃圾-雪。

TI 是否有 LCD 图像转换器的替代产品?LCD 图像转换器是一种将图像文件(jpg、bmp、png 等)转换为像素值的 C 数据数组的工具?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    首先、将 unsigned int 更改为 uint8_t、这样可以节省一半。

    接下来、您可能必须考虑某种无损压缩、例如 RLL。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 Keith、

    LCD 需要采用16位格式

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在将数据发送到 LCD 的同时、您始终可以转换数据格式。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    LCD 使用16位并行 GPIO 接口以获得最大速度、希望查看如下所示的打包数据。 我如何强制8位数据与该值相匹配?

    LCD_WRITE_DATA (0xFF00);   //红色、绿色-这3条语句设置一个像素-示例固定为红色、通常是全部4个十六进制数字的混合形式。

    LCD_WRITE_DATA (0x00FF);   //蓝色、红色

    LCD_WRITE_DATA (0x0000);   //绿色、蓝色

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我很确定图形重整器是面向 GRLib 的,它期望像这样的图像:

    这没有太大帮助。 看上去不像您需要的格式化。

    要将以字节为单位的映像与您的函数一起使用、只需对其进行写入操作:

    uint16_t arg =((byteMSB<<8)| byteLSB)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Keith、感谢回复

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    更新

    我不知道将3MB 文件"压缩成什么–30KB、足够小、能够存储在 MCU 中256KB 闪存的剩余空间? MCU 闪存必须保存程序和所有全局变量-请确认。

     如果不通过 microSD 卡或独立闪存芯片添加外部存储器、就无法处理如此大的数据文件–请确认。

     TI 是否有与俄罗斯 LCD 图像转换器等效的产品?

     我做了大量的 google 搜索查找以便查找图像转换器、它们全都是:图像到图像、而不是图像到数据。 您知道 LCD 图像转换器的替代方案吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ted:

    我不知道能够在部件内部压缩3MB 到30KB 的空间以及剩余的内存的方法。 您无法使用外部闪存/ SD 卡来提取映像数据的原因是什么吗?

    此致、

    Luke

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Luke、您好!  

    感谢您确认不能这样做。 我有一个连接到一个 MCU 的 uSD 卡、但我还没有为它开发代码。 这将解决内存问题。 您知道 LCD 图像转换器的替代方案吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     MSP430最接近的功能是图形库和关联的图像重整器。 此处是指向图形库的链接、您还可以单独下载图像重整工具。  

    https://www.ti.com/tool/MSP-GRLIB#downloads 

    此致、

    Luke  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Luke、我将介绍一下

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 Keith 和 Luke 的帖子。

    在嵌入式 LCD 上显示图像的过程远比我想象的复杂得多。 其他所有工作、也可以继续工作。 下面是我发现的内容的总结。

    无法在 LCD 上直接显示图像文件:jpg、bmp、png、tiff。 它必须转换为 C/C++数据数组、存储在文本.c 或.h 文件中、并通过代码写入 LCD 的像素。  

    即使是一个20-40 MB 的 PSD 文件,已在 Photoshop 中转换为90 KB jpg 文件,将创建一个3MB .c 或.h 文本数据文件为480 x 272像素的彩色图像。 当然、尺寸因使用的颜色数量而异。  

    高端16或32位 MCU - msp430f5638或 msp432p401r 仅支持256KB 的闪存、用于程序和全局数据–无法容纳3MB 阵列。  

    使用 uSD 卡存储数据阵列将解决内存问题。 单独的闪存 RAM 芯片同样适用、但通用性更差、而 SBC 则无法使用。 但我还没有开发 USD 代码。  

    LCD 图像转换器(LIC)和 TI 的图像重整器(IR)都用于创建文本.c 或.h 数据数组。  图像重整看起来可能会生成较小的文件。

    还可以打开、剖析和读取图像文件、并通过代码将其转换为 C/C++数据数组–请参阅 Bob Grant 的在线课程、我仅观看了前15分钟。 编写您自己的代码、以实际执行 LIC 或 IR 的操作。

    https://www.youtube.com/watch?v=exjzGMX4fqs