打印

如何高效的把一个数组左移一bit?

[复制链接]
3536|57
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fjhcpu|  楼主 | 2019-12-22 08:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
fjhcpu|  楼主 | 2019-12-22 09:33 | 只看该作者
有大神知道怎么搞吗?

使用特权

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

使用特权

评论回复
地板
mcu5i51| | 2019-12-22 11:19 | 只看该作者
窗口方式刷新,根据左右移动或上下移动,调整扫描方式

使用特权

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

DMA能做位带移动?

使用特权

评论回复
6
fjhcpu|  楼主 | 2019-12-22 12:11 | 只看该作者
没大侠搞这行的?

使用特权

评论回复
7
Diyer123| | 2019-12-22 14:20 | 只看该作者
无特殊指令的话,常规手段最简单是查表法移位,空间换时间。

使用特权

评论回复
8
叶春勇| | 2019-12-22 16:59 | 只看该作者
首先数组包装成32位,一次移动32个。用汇编语言的带进位循环右移。

使用特权

评论回复
9
xch| | 2019-12-22 18:12 | 只看该作者
本帖最后由 xch 于 2019-12-22 18:29 编辑
fjhcpu 发表于 2019-12-22 12:01
DMA能做位带移动?

好像不行。只能MCU

使用特权

评论回复
10
xch| | 2019-12-22 18:37 | 只看该作者
fjhcpu 发表于 2019-12-22 09:33
有大神知道怎么搞吗?

bitband 操作可能是最快的。

使用特权

评论回复
11
fjhcpu|  楼主 | 2019-12-22 19:02 | 只看该作者
Diyer123 发表于 2019-12-22 14:20
无特殊指令的话,常规手段最简单是查表法移位,空间换时间。

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

使用特权

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

使用特权

评论回复
13
Diyer123| | 2019-12-22 20:38 | 只看该作者
fjhcpu 发表于 2019-12-22 19:02
如何查表,还不知道有这方法,讲讲看呀。

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

使用特权

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

使用特权

评论回复
15
coody| | 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点或以上。

使用特权

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

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

使用特权

评论回复
17
ayb_ice| | 2019-12-23 08:48 | 只看该作者
DMA + BITBAND确实是最高效的

使用特权

评论回复
18
fjhcpu|  楼主 | 2019-12-23 09:02 | 只看该作者
bit位段不能用dma吧?

使用特权

评论回复
19
zuoanhuafeng| | 2019-12-23 09:38 | 只看该作者
能不能用联合体,定义支持最长的整型和数组,移位整型变量,处理最高位,最后使用数组?

使用特权

评论回复
20
zuoanhuafeng| | 2019-12-23 09:44 | 只看该作者
xch 发表于 2019-12-22 18:37
bitband 操作可能是最快的。

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

120

主题

368

帖子

3

粉丝