| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> imx6ull spi-imx.c 驱动接收导致内存问题 -> 正文阅读 |
|
[嵌入式]imx6ull spi-imx.c 驱动接收导致内存问题 |
spi-imx.c驱动接收导致重启: 原来是如果上一次SPI发送还有要接收的数据,接下一次spi发送中如果上次的接收缓存用的是临时变量,这次保存数据时原来的空间已经被释放,而spi_imx->rx_buf只有在本次接收中spi_imx_pio_transfer,被重置 while (spi_imx->devtype_data->rx_available(spi_imx)) spi_imx->rx(spi_imx); 所以有两种修改方式: 1、用局的buff接收; 2、spi_imx_transfer中spi_imx->rx改为:eadl(spi_imx->base + MXC_CSPIRXDATA) [ 1722.007813] yytek,board spi2.2: I/O Error in PIO [ 1722.014474] yytek,board spi2.2: SPI transfer failed: -110 [ 1722.056835] spi_master spi2: failed to transfer one message from queue [ 1739.448762] yytek,board spi2.2: I/O Error in PIO [ 1739.460088] yytek,board spi2.2: SPI transfer failed: -110 [ 1739.485536] spi_master spi2: failed to transfer one message from queue [ 1744.006441] yytek,board spi2.2: I/O Error in PIO [ 1744.015674] yytek,board spi2.2: SPI transfer failed: -110 [ 1744.048348] spi_master spi2: failed to transfer one message from queue [ 2142.018245] Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in: syscpld_run+0x94/0x94 [sysdrv] ``` code static int spi_imx_transfer(struct spi_device *spi, struct spi_transfer *transfer) { struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master); /* flush rxfifo before transfer */ while (spi_imx->devtype_data->rx_available(spi_imx)) spi_imx->rx(spi_imx); if (spi_imx->slave_mode) return spi_imx_pio_transfer_slave(spi, transfer); if (spi_imx->usedma) return spi_imx_dma_transfer(spi_imx, transfer); else return spi_imx_pio_transfer(spi, transfer); } #define MXC_SPI_BUF_RX(type) \ static void spi_imx_buf_rx_##type(struct spi_imx_data *spi_imx) \ { \ unsigned int val = readl(spi_imx->base + MXC_CSPIRXDATA); \ \ if (spi_imx->rx_buf) { \ *(type *)spi_imx->rx_buf = val; \ spi_imx->rx_buf += sizeof(type); \ } \ \ spi_imx->remainder -= sizeof(type); \ } static int spi_imx_pio_transfer(struct spi_device *spi, struct spi_transfer *transfer) { struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master); unsigned long transfer_timeout; unsigned long timeout; spi_imx->tx_buf = transfer->tx_buf; spi_imx->rx_buf = transfer->rx_buf; spi_imx->count = transfer->len; spi_imx->txfifo = 0; spi_imx->remainder = 0; ``` |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 6:47:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |