最近做了个ADC采电压的手工小制作又失败了

[复制链接]
2670|37
叶春勇 发表于 2021-3-16 15:15 | 显示全部楼层
yjmwxwx 发表于 2021-3-16 14:27
是用的移动平均,FIR那个试了下发现相位抖动就没用,我写的移动平均程序好像比较笨,老实的做了256次加法 ...

你的移动平均的效率太低了,不是这么算的。
FIR滤波器,才不得不这么算
 楼主| yjmwxwx 发表于 2021-3-16 16:03 | 显示全部楼层
叶春勇 发表于 2021-3-16 15:15
你的移动平均的效率太低了,不是这么算的。
FIR滤波器,才不得不这么算

确实效率低,每次都要算256次加法,看你这么说我才知道,这种别人都是怎么写的?
叶春勇 发表于 2021-3-16 16:59 | 显示全部楼层
yjmwxwx 发表于 2021-3-16 16:03
确实效率低,每次都要算256次加法,看你这么说我才知道,这种别人都是怎么写的? ...

你的理解没错,移动平均也是fir滤波器,但是移动平均,系数相同,可以优化
sum1=a[4]+a[3]+a[2]+a[1]+a[0]
sum2=a[5]+a[4]+a[3]+a[2]+a[1]
这种可以优化
sum2=a[5]+sum1-a[0]
你256个,也是同理。fir一般情形滤波器就不能了。
 楼主| yjmwxwx 发表于 2021-3-16 17:15 | 显示全部楼层
叶春勇 发表于 2021-3-16 16:59
你的理解没错,移动平均也是fir滤波器,但是移动平均,系数相同,可以优化
sum1=a[4]+a[3]+a[2]+a[1]+a[0 ...

我脑袋有点反应不过来,优化下只做一个加法和一个减法还不用占内存了么? 有没有完整的程序?
 楼主| yjmwxwx 发表于 2021-3-16 18:53 | 显示全部楼层
本帖最后由 yjmwxwx 于 2021-3-16 18:55 编辑
叶春勇 发表于 2021-3-16 16:59
你的理解没错,移动平均也是fir滤波器,但是移动平均,系数相同,可以优化
sum1=a[4]+a[3]+a[2]+a[1]+a[0 ...

谢谢你了,你都说的这么明白了我还看不懂,已经改过来了,比原来效率高太多了,以前只是看着书上的FIR算法写的,没想到还能优化,脑子不怎么灵活。。。
看样子一个人闭门造车不太行,这么大错误都发现不了,别的地方肯定还有更多错误。。

  1. __lv_bo_qi:
  2.         @地址顺序:指针,累加值,缓冲区
  3.         @入口R0=缓冲区,R1=数据, r2,=指针
  4.         @出口R0
  5.         push {r3-r6,lr}
  6.         movs r4, # 4
  7.         ldr r5, [r2]
  8.         mov r3, r5
  9.         lsls r3, r5, # 2
  10.         ldr r6, [r0, r3]
  11.         str r1, [r0, r3]
  12.         adds r5, r5, # 1
  13.         str r5, [r2]
  14.         cmp r5, r4
  15.         bne __huanchong_leijia1
  16.         movs r5, # 0
  17.         str r5, [r2]
  18. __huanchong_leijia1:
  19.         subs r0, r0, # 4
  20.         ldr r5, [r0]
  21.         adds r1, r1, r5
  22.         subs r1, r1, r6
  23.         str r1, [r0]
  24.         asrs r0, r1, # 2
  25.         pop {r3-r6,pc}


 楼主| yjmwxwx 发表于 2021-3-16 21:21 | 显示全部楼层
叶春勇 发表于 2021-3-16 20:07
我还得向你学下汇编,你说你会点c语言

adc值存在r0中

谢谢你帮我 写的完整的程序,我知道你想告诉我不要再用汇编写程序了,其实我写的汇编很差,肯定不如编译器效率高。你这个算法效率真高,决定成败的算法,我那样写效率太低了,真的笨死了。就这样简单一个程序,汇编写也很蛋疼,真不如C语言方便,不过我性格比较怪,有宽敞平坦的公路我不走,就喜欢爬山过坑,不然感觉没意思。

  1. while:
  2.         ldr r0, = adc
  3.         ldr r5, = n
  4.         ldr r0, [r0]
  5.         ldr r4, = q
  6.         ldrb r6, [r5]
  7.         lsls r6, r6, # 2
  8.         ldr r7, [r4, r6]
  9.         str r0, [r4, r6]
  10.         subs r0, r0, r7
  11.         ldr r4, = sum
  12.         lsrs r6, r6, # 2
  13.         ldr r7, [r4]
  14.         adds r6, r6, # 1
  15.         adds r7, r7, r0
  16.         str r7, [r4]
  17.         strb r6, [r5]
  18.         ldr r6, = v
  19.         asrs r7, r7, # 8
  20.         str r7, [r6]
  21.         b while




叶春勇 发表于 2021-3-16 23:51 | 显示全部楼层
yjmwxwx 发表于 2021-3-16 21:21
谢谢你帮我 写的完整的程序,我知道你想告诉我不要再用汇编写程序了,其实我写的汇编很差,肯定不如编译 ...

不用多想,我没那么喜欢做传销。己所不欲,勿施于人。我也是没事看了以下你的程序。你的除法代码也挺长的。我再看看。
 楼主| yjmwxwx 发表于 2021-3-17 10:17 | 显示全部楼层
叶春勇 发表于 2021-3-16 23:51
不用多想,我没那么喜欢做传销。己所不欲,勿施于人。我也是没事看了以下你的程序。你的除法代码也挺长的 ...

我写的程序都很差的,也就勉强能运行不跑飞。
 楼主| yjmwxwx 发表于 2021-3-17 10:20 | 显示全部楼层
king5555 发表于 2021-3-17 08:46
都是高手。汇编不好写,但有个优点胜过别个,佔用单片机內部记亿体较少。 ...

你看叶春勇的算法比我原来快上百倍,所以语言不重要关键还是算法。现在汇编已经淘汰了,也就岁数大学不会新编程语言的才用。
叶春勇 发表于 2021-3-17 17:09 | 显示全部楼层
yjmwxwx 发表于 2021-3-17 10:20
你看叶春勇的算法比我原来快上百倍,所以语言不重要关键还是算法。现在汇编已经淘汰了,也就岁数大学不会 ...

汇编语言不会淘汰的,任何高级语言都是汇编语言的语法糖。
主要是开发效率。用python开发效率极高,做调包侠,c语言也就比汇编稍微好点。也是比较手动了,各种数据结构都得自己定义。
今天看了一下,宏汇编,gcc-as的格式是这样
.macro ldm reg,mem @reg<-mem
ldr reg,=\mem
ldr reg,[reg]
.endm

.macro incm mem @n=n+1
ldm r0,\mem
adds r1,r0,#1
str r1,[r0]
.endm

.macro movm smem,dmem @dmem=smem
ldm r0,\smem
ldr r1,=\dmem
str r0,r[1]
.endm
你看看有没有问题。

 楼主| yjmwxwx 发表于 2021-3-17 18:38 | 显示全部楼层
叶春勇 发表于 2021-3-17 17:09
汇编语言不会淘汰的,任何高级语言都是汇编语言的语法糖。
主要是开发效率。用python开发效率极高,做调 ...

这个我也不知道怎么用,我只用过一次宏汇编,现在都忘记怎么用了。
最好还是看官方手册,下载个编译器试下就知道了,我不想学宏汇编怎么用。
https://www.sourceware.org/binutils/docs/as/Macro.html

以前只试验过一次,现在我都看不懂是什么意思了。。。

  1.         .macro  空操作
  2.         .short   0x0000
  3.         .endm

  4.         .macro  A到B
  5.         .short   0x2100
  6.         .endm

  7.         .macro 立即数到A t:vararg
  8.         .short   0x100\t
  9.         .endm

  10.         .macro  A加B
  11.         .short   0x1700
  12.         .endm
  13.         
  14.         .macro  A减B
  15.         .short   0x1800
  16.         .endm
  17.         
  18.         .macro  无条件转移
  19.         .short   0x0b00
  20.         .endm
  21.         
  22.         .macro  为零转移
  23.         .short   0x0c00
  24.         .endm
  25.         
  26.         .macro  不为零转移
  27.         .short   0x0d00
  28.         .endm
  29.         
  30.         .macro  A到RAM
  31.         .short   0x7100
  32.         .endm
  33.         .macro  RAM到A
  34.         .short   0x1a00
  35.         .endm

  36. .section .text               
  37.         立即数到A t=5
  38.         A到B
  39.         A到RAM
  40.         A减B
  41.         不为零转移


叶春勇 发表于 2021-3-17 18:46 | 显示全部楼层
yjmwxwx 发表于 2021-3-17 18:38
这个我也不知道怎么用,我只用过一次宏汇编,现在都忘记怎么用了。
最好还是看官方手册,下载个编译器试 ...

汇编中有常用套路,固化下来,写代码效率高很多,你这种汉化,提高不了写代码的速度。
 楼主| yjmwxwx 发表于 2021-3-17 19:05 | 显示全部楼层
叶春勇 发表于 2021-3-17 18:46
汇编中有常用套路,固化下来,写代码效率高很多,你这种汉化,提高不了写代码的速度。 ...

以前有人要搞个汉字写程序于是就试验了下,可能专业写汇编的也用宏写,这个等于又封装了一层,我现在主要问题感觉不懂别人算法怎么实现的,只要懂写还是能写出来,不懂算法怎么实现的就是用C语言也不知道怎么写。

我一开学汇编就是从一个老外网站上学的,这个老外写的程序就用的宏汇编,但是我没学他这个写法。
http://pygmy.utoh.org/riscy/cortex/


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
叶春勇 发表于 2021-3-17 19:20 | 显示全部楼层
yjmwxwx 发表于 2021-3-17 19:05
以前有人要搞个汉字写程序于是就试验了下,可能专业写汇编的也用宏写,这个等于又封装了一层,我现在主要 ...

我找到以前写的除法程序,没优化和查错的。
我手机装了linux,arm-none-eabi-gcc我装了,不过不准备深入研究汇编,c里可以内联汇编。还装了matlab开源版

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
叶春勇 发表于 2021-3-17 19:32 | 显示全部楼层
yjmwxwx 发表于 2021-3-17 19:05
以前有人要搞个汉字写程序于是就试验了下,可能专业写汇编的也用宏写,这个等于又封装了一层,我现在主要 ...

实现了forth,堆栈语言,工控里的plc指令也是堆栈的,现在没研究了。
宏汇编可以把高级语言的常用特性实现,提高写代码的效率。
学算法还是要高级语言,理解算法后,转成c语言或汇编,要会一种库比较多的脚本语言
 楼主| yjmwxwx 发表于 2021-3-17 20:41 | 显示全部楼层
叶春勇 发表于 2021-3-17 19:20
我找到以前写的除法程序,没优化和查错的。
我手机装了linux,arm-none-eabi-gcc我装了,不过不准备深入 ...

我那个除法程序是直接抄书上的不是我自己写的,他那个程序就是移位相减。
 楼主| yjmwxwx 发表于 2021-3-17 20:47 | 显示全部楼层
叶春勇 发表于 2021-3-17 19:32
实现了forth,堆栈语言,工控里的plc指令也是堆栈的,现在没研究了。
宏汇编可以把高级语言的常用特性实 ...

谢谢你浪费时间想想帮助我给我指条正确的路,我比较固执的,一条路走到黑,我搞的都是一些简单的程序,用不到复杂的算法,最近想学控制上的一些知识才下载了个octave用来计算,现在还不怎么会用。
叶春勇 发表于 2021-3-17 21:00 | 显示全部楼层
yjmwxwx 发表于 2021-3-17 20:47
谢谢你浪费时间想想帮助我给我指条正确的路,我比较固执的,一条路走到黑,我搞的都是一些简单的程序,用 ...

帮不上忙了,就帮你顶到这了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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