首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TFT液晶屏幕速度问题

TFT液晶屏幕速度问题
EN

Stack Overflow用户
提问于 2017-11-09 09:21:57
回答 1查看 207关注 0票数 1

我使用的是TFT液晶显示屏(ILI9163c - 160*128)。它与、AR9331、模块和spi连接。AR9331与OpenWRT linux发行版一起运行。所以,我驾驶我的液晶显示器与spidev0.1 0.1。当填充屏幕或在LCD上写任何字符串时,打印时间太长了。那么,我怎样才能获得足够的打印速度。

谢谢。

这是我用spi引脚用spidev写数据的函数.

代码语言:javascript
复制
void spi_transactor(unsigned char *write_data, int mode,int size)
{
    int ret;
    struct spi_ioc_transfer xfer[4];

    unsigned char *init_reg;
    init_reg  = (unsigned char*) malloc(size);
    memcpy(init_reg,write_data,size);

    if (mode)
    {
        gpio_set_value(_rs, 1);    // DATA
    }
    else
    {
        gpio_set_value(_rs, 0);    // COMMAND
    }

    memset(xfer, 0, sizeof xfer);

    xfer[0].bits_per_word = 8;
    xfer[0].tx_buf = (unsigned long)init_reg;
    xfer[0].rx_buf = 0;               //( unsigned long ) &buf_rx[0];
    xfer[0].len = size;               //wlength + rlength;
    xfer[0].delay_usecs = 0;
    xfer[0].speed_hz = speedx;       // 8MHZ
    //xfer[0].speed_hz = 160000000;    // 40MHZ
    ret = ioctl(spi_fd, SPI_IOC_MESSAGE(1), &xfer);

    gpio_set_value(_rs, 1);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-09 10:08:23

这里的主要性能问题是,每次调用函数时,都要对要发送到堆上的数据进行硬拷贝。您每次都会从头开始设置通信参数,尽管它们总是相同的。更糟糕的是,这个函数有一个巨大的错误:它泄漏内存,好像没有明天一样。

硬拷贝并不是真正必要的,除非SPI通信需要太多的时间让程序坐下来忙碌--等待它完成(很有可能)。在这种情况下,你能做的是:

  • 将整个SPI业务外包给一个单独的线程。
  • 使用您最喜欢的ADT为线程创建一个工作队列。应该是线程安全的FIFO。
  • 调用方将数据作为硬拷贝复制到ADT中。
  • 线程从ADT中选择一段工作,然后从那里传输,而不复制另一份硬拷贝。
  • 线程等待SPI通信完成,然后确保ADT在获取下一个数据之前删除数据。对于硬实时需求,您可以让线程预先准备下一条消息,同时等待上一条消息。
  • 通信参数"xfer“由线程设置一次,它只在不同情况下更改数据目标地址。
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47198053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档