- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我正在进行一个项目,该项目涉及每秒可更新 60 次的 LCD 屏幕。它使用 BitmapFrame
,我需要将这些像素复制到更新屏幕的库中。目前我得到大约 30-35 FPS,这太低了。所以我尝试使用多线程,但这会产生很多问题。
DisplayController 已经创建了一个 thead 来完成所有的工作:
public void Start()
{
_looper = new Thread(Loop);
_looper.IsBackground = true;
_looper.Start();
}
private void Loop()
{
while (_IsRunning)
{
renderScreen();
}
}
它调用绘制所有元素并将像素复制到 BitmapFrame
的 renderScreen
方法。但是这个过程花费的时间太长,所以我的 FPS 下降了。我试图通过创建一个 Task
来解决这个问题,它可以绘制、复制和写入像素。但此解决方案会占用大量 CPU 并导致屏幕出现故障。
public void renderScreen()
{
Task.Run(() =>
{
Monitor.Enter(_object);
// Push screen to LCD
BitmapFrame bf = BitmapFrame.Create(screen);
RenderOptions.SetBitmapScalingMode(bf, BitmapScalingMode.LowQuality);
bf.CopyPixels(new Int32Rect(0, 0, width, height), pixels, width * 4, 0);
DisplayWrapper.USBD480_DrawFullScreenBGRA32(ref disp, pixels);
Monitor.Exit(_object);
});
}
我已经阅读了很多关于 C# 的并发队列的资料,但这不是我需要的。使用两个线程会导致编译器说该变量由另一个线程拥有。
如何同时渲染新位图并将该位图每秒写入 LCD 60 次?
最佳答案
我假设 USBD480_DrawFullScreenBGRA32
是实际写入 LCD 的内容,其余代码只是准备图像。我认为提高性能的关键是在编写上一张图像的同时准备下一张图像。
我认为最好的解决方案是使用两个线程并使用 ConcurrentQueue
作为需要写入内容的缓冲区。一个线程准备图像和 puts them into the ConcurrentQueue
, 和另一个线程 pulls them off the queue并将它们写入LCD。这样您就没有每次调用 Task.Run
的开销。
限制写入队列的帧数也可能是明智的,这样它就不会超前太远而占用不必要的内存。
关于C#异步LCD写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58402150/
我有一个基于 ARM 的板( http://wiki.friendlyarm.com/wiki/index.php/NanoPi_M1 )并在其上使用 Ubuntu-server 16.04。我有一个
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭11 年前。 Improve th
我对我的第一个 LCD 示例感到疯狂。 我使用Arduino Uno,我想用最简单的例子尝试液晶屏:Hello World液晶示例。 我以与上面示例相同的方式连接引脚,但 LCD 首先在第一行显示 1
我已经非常接近在 LCD 上按预期输出了。问题是,当我从整数中提取数字以将数字作为整数并将余数作为我的分数时,我似乎无法获得正确的输出。 在小数点之前,输出看起来很好,但在小数点之后,则不然。 voi
我已经对 Atmega-16 微 Controller 进行了编程,以连接 LM016L LCD 显示器。程序如下: #include #include #define MrLCDsCrib PO
我正在编写一个在微处理器和 LCD 屏幕上从 3 开始倒数的函数。 void countdown() { _delay_ms(1000); draw_string("3",40,20); _delay
我被要求为 a display like the one in this ad 设计一个 LCD 墙应用程序. 要求是墙可以显示全屏视频或将墙分成不同的部分以显示多个视频或图像和视频。 我想了解可以使
我在这里有一个小问题。我有一个与arduino接口(interface)的16x2 lcd。在下面的闪烁中我可以使光标闪烁,但我想闪烁数字而不是光标。如何在这里使用 arduino。 Keypad s
我为带有 HD44780 Controller 的 LCD 创建了一个库,从数据表中我读到代码 0x18 会将整个显示向左移动一个位置,但是当我这样做时,显示消失了。我还读到 0x1C 将整个显示向右
我正在尝试为 20x2 LCD 制作一些自定义字符。我正在使用 Atmega µController 来控制具有 4 位接口(interface)的 LCD。我对 LCD 的所有命令似乎都能正常工作(
这是我尝试显示湿度传感器数据的代码到我的液晶显示器... 当我运行这个程序时, Traceback(most recent call last): File "lcd.py", line 7 in l
我正在尝试通过 USB 串行端口将整数从 MATLAB 发送到 Ardunio Uno,然后将它们显示在 LCD 上。我的问题是 128 到 159 的数字在 Arduino 显示器上显示为 63。
我用Tiva c驱动LCD,但有些字符和数字显示错误,例如N显示为L,2和3显示为0,但其他字符和字母显示正确。 下面是显示字符的函数: void LCD_voidWriteCharacter(cha
我已将 LCD 显示器连接到我正在从事的项目中。我有很多输入/输出,我想根据输入的状态显示不同的消息。现在,在我开始复杂化/添加更多硬件之前。我需要一些帮助。当没有输入处于事件状态时,我希望 LCD
我有一个带有 I2C 背负式适配器的 2 x 16 LCD 显示器。作为一个简单的开始,我只是显示编码器值。但是,当我转动编码器时,我会在不同区域的液晶显示屏上看到奇怪的文字。有时显示会恢复并仅显示“
我正在用 做一个小项目arduino 以太网 板。我是arduino的新手,想知道是否关注液晶显示器是否与我的 arduino 兼容。如果兼容,我是否需要更多硬件,例如电缆等... 我的 Arduin
我正在尝试使用 Jfxtras 中的 LCD 仪表。这是我必须创建仪表的代码: final Gauge lcd = GaugeBuilder.create() .gau
我有一个数组,其输入是由用户使用键盘给出的。所有输入都存储在名为 storeKeys 的数组中。数组的索引由变量storeKeysIndex保存,初始化为0,当按下一个键时,按下的键的值存储在stor
目前我正在制作一个用于将自定义文本打印到 LCD 的类。 我将 lcd 对象作为构造函数中的参数传递给类。 Display.h #ifndef Display_h #define Display_h
我只想以 LCD 格式显示系统时钟时间。我还希望使用 hh:mm:ss 格式显示时间。我的代码如下。但是当我运行它时,它并不像我预期的那样。谁能解释一下为什么? import sys from PyS
我是一名优秀的程序员,十分优秀!