搜索

[在线研讨会] 如何高效的把一个数组左移一bit?

[复制链接]
1997|57
 楼主 | 2019-12-22 08:38 | 显示全部楼层 |阅读模式
STM32F103如何高效的对一维数组向左移动一个bit?  就是LED点阵上使用的,我设计的效率相对市面上的成品LED控制卡,效率还是低了点。。都是用的是STM32F103C8T6系列。
forum(4).jpg

使用特权

评论回复

评论

cooldog123pp 2019-12-24 11:52 回复TA
默默的看大神们是怎么做的。 
 楼主 | 2019-12-22 09:33 | 显示全部楼层
有大神知道怎么搞吗?

使用特权

评论回复
| 2019-12-22 10:13 | 显示全部楼层
M3核,因为有位带,甚至可以用DMA来做移位。
LED控制卡不熟悉,不过让我做,应该会考虑调整一下刷新起始位置,不需要真的移位吧。
话说回来,不过几百个字节,在内存里处理一下,能慢到哪去?

使用特权

评论回复

评论

xch 2019-12-22 18:16 回复TA
M0+也可能有。已知FREESCALE M0+有。 
| 2019-12-22 11:19 | 显示全部楼层
窗口方式刷新,根据左右移动或上下移动,调整扫描方式

使用特权

评论回复
 楼主 | 2019-12-22 12:01 | 显示全部楼层
linnjing 发表于 2019-12-22 10:13
M3核,因为有位带,甚至可以用DMA来做移位。
LED控制卡不熟悉,不过让我做,应该会考虑调整一下刷新起始位 ...

DMA能做位带移动?

使用特权

评论回复
 楼主 | 2019-12-22 12:11 | 显示全部楼层
没大侠搞这行的?

使用特权

评论回复
| 2019-12-22 14:20 | 显示全部楼层
无特殊指令的话,常规手段最简单是查表法移位,空间换时间。

使用特权

评论回复
| 2019-12-22 16:59 | 显示全部楼层
首先数组包装成32位,一次移动32个。用汇编语言的带进位循环右移。

使用特权

评论回复
| 2019-12-22 18:12 | 显示全部楼层
本帖最后由 xch 于 2019-12-22 18:29 编辑
fjhcpu 发表于 2019-12-22 12:01
DMA能做位带移动?

好像不行。只能MCU

使用特权

评论回复
| 2019-12-22 18:37 | 显示全部楼层
fjhcpu 发表于 2019-12-22 09:33
有大神知道怎么搞吗?

bitband 操作可能是最快的。

使用特权

评论回复
 楼主 | 2019-12-22 19:02 | 显示全部楼层
Diyer123 发表于 2019-12-22 14:20
无特殊指令的话,常规手段最简单是查表法移位,空间换时间。

如何查表,还不知道有这方法,讲讲看呀。

使用特权

评论回复
| 2019-12-22 19:39 | 显示全部楼层
效率低,是指不能在要求的时间内移位完吗?有没有具体的比较数据或者出现异常现象?如果是这样,可能要更高频率的单片机了。

使用特权

评论回复
| 2019-12-22 20:38 | 显示全部楼层
fjhcpu 发表于 2019-12-22 19:02
如何查表,还不知道有这方法,讲讲看呀。

已经说的很明白了……再具体你就得花钱发个外包贴了。

使用特权

评论回复
| 2019-12-22 20:49 | 显示全部楼层
整个函数用汇编语言来写。首先清 C 标志位,然后对每一个元素执行一次 rrxs 指令,数据整体左移一位,原来的 C 标志位移到最低位,同时把最高位放到 C 标志位里。每次循环判断结束条件的时候记得保留上一条指令产生的 C 标志位。

使用特权

评论回复
| 2019-12-22 23:15 | 显示全部楼层
我也做实时显示控制卡,128*16的屏,显存就是16*16=256字节,而实际我会做成144*16的显存,即16*18=288字节,每移位一个点,就是操作一行18字节移一个点,16行都要移一次,一共要操作288个字节,我用STC8A8K64S4A12的8位机都可以做到256*32点,而用STM32F103系列的,轻松可以做到256*64点或以上。

使用特权

评论回复
 楼主 | 2019-12-23 07:19 | 显示全部楼层
coody 发表于 2019-12-22 23:15
我也做实时显示控制卡,128*16的屏,显存就是16*16=256字节,而实际我会做成144*16的显存,即16*18=288字节 ...

左移动速度快,亮度也不降低?

使用特权

评论回复
| 2019-12-23 08:48 | 显示全部楼层
DMA + BITBAND确实是最高效的

使用特权

评论回复
 楼主 | 2019-12-23 09:02 | 显示全部楼层
bit位段不能用dma吧?

使用特权

评论回复
| 2019-12-23 09:38 | 显示全部楼层
能不能用联合体,定义支持最长的整型和数组,移位整型变量,处理最高位,最后使用数组?

使用特权

评论回复
| 2019-12-23 09:44 | 显示全部楼层
xch 发表于 2019-12-22 18:37
bitband 操作可能是最快的。

数组有点大,位带区域,这个芯片够吗?

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /2 下一条

在线客服 快速回复 返回顶部 返回列表