矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
楼主: yjmwxwx

试用不到1元的PY32单片机

[复制链接]
     
发表于 2023-4-16 16:04:03 | 显示全部楼层
汇编语言,主要是精简,占ROM空间小,运行时间清晰.
但学会C后,就极少再用汇编了.
回复 支持 反对

使用道具 举报

     
发表于 2023-4-16 16:05:30 | 显示全部楼层
yjmwxwx 发表于 2023-4-15 17:21
搞单片机的感觉还是汇编简单,我搞的都是一些简单小制作用汇编足够了,C语言那么复杂看着就劝退了

说反了吧。汇编远比C复杂。不到万不得已,不会用汇编。即使用汇编,也是写个函数给其他人调用
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-4-16 17:31:13 | 显示全部楼层
vkbvfhp 发表于 2023-4-16 16:04
汇编语言,主要是精简,占ROM空间小,运行时间清晰.
但学会C后,就极少再用汇编了.

C太难学了,看着那些英文就头大
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-4-16 17:35:03 | 显示全部楼层
onesword 发表于 2023-4-16 16:05
说反了吧。汇编远比C复杂。不到万不得已,不会用汇编。即使用汇编,也是写个函数给其他人调用

你要理解我们不会英文,比如我配置个外部振荡器时钟,看官方C程序看的我头大根本看不懂

截图_2023-04-16_17-30-33.png


上面就是官方C程序,让我们不懂英文的怎么看啊,乱糟糟的根本看不懂。只能自己看手册慢慢摸索试验,下面我写的多简单,最起码让人不眼花

  1. shizhong:
  2.         ldr r2, = 0x40022000   @FLASH访问控制
  3.         movs r1, # 0
  4.         str r1, [r2]          @0:flash没等待,1:flash等待
  5.         ldr r0, = 0x40021000 @ rcc
  6.         ldr r1, = 0x20008
  7.         str r1, [r0, # 0x10]    @外部晶振选择
  8.         ldr r1, [r0]
  9.         ldr r2, = 0x10000
  10.         orrs r1, r1, r2
  11.         str r1, [r0]            @开外部振荡器
  12. denghse:
  13.         ldr r1, [r0]
  14.         lsls r1, r1, # 14
  15.         bpl denghse             @等外部振荡器

  16.         ldr r1, = 0x01
  17.         str r1, [r0, # 0x0c]    @PLL配置
  18.         ldr r2, [r0]
  19.         ldr r1, = 0x1000000
  20.         orrs r1, r1, r2
  21.         str r1, [r0]            @开PLL

  22. dengpll:
  23.         ldr r1, [r0]
  24.         lsls r1, # 6
  25.         bpl dengpll             @等PLL
  26.         movs r1, # 0x02
  27.         str r1, [r0, # 0x08]    @选择系统时钟
复制代码
回复 支持 反对

使用道具 举报

     
发表于 2023-4-16 18:49:18 | 显示全部楼层
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-4-17 12:48:09 | 显示全部楼层
7毛的单片机带DMA,内存4K 哈哈真是划算

ADC采集出数据了,看着还可以,两个100欧电阻分压

程序
adc.zip (12.66 KB, 下载次数: 53)

这价格这ADC还可以啊

截图_2023-04-17_12-31-00.png
回复 支持 反对

使用道具 举报

     
发表于 2023-4-17 14:44:21 | 显示全部楼层
yjmwxwx 发表于 2023-4-17 12:48
7毛的单片机带DMA,内存4K 哈哈真是划算

ADC采集出数据了,看着还可以,两个100欧电阻分压

看了本帖的讨论,是不是可以这样理解:对于单片机这种最简单的嵌入式系统(CPU、内存、外围接口驱动都嵌入到一块芯片里),系统核心程序的结构相对简单,所以最适合的开发工具就是汇编语言。但对待处理器、内存、图形等等能力大大增加并面对更复杂应用的系统,还是中、高级语言开发工具比较合适。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-4-17 15:25:26 | 显示全部楼层
chason4752 发表于 2023-4-17 14:44
看了本帖的讨论,是不是可以这样理解:对于单片机这种最简单的嵌入式系统(CPU、内存、外围接口驱动都嵌 ...

搞单片机小制作程序很小,不算数组也就不到10K,这么简单的程序还要分很多文件很多库太麻烦了,我最近看这个单片机官方程序一看就头大,本身很简单东西让他们搞的那么复杂
回复 支持 1 反对 1

使用道具 举报

     
发表于 2023-4-17 15:45:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2023-4-17 16:02:52 | 显示全部楼层
yjmwxwx 发表于 2023-4-17 15:25
搞单片机小制作程序很小,不算数组也就不到10K,这么简单的程序还要分很多文件很多库太麻烦了,我最近看 ...

术业有专攻!
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-4-17 16:08:09 | 显示全部楼层
闻太师 发表于 2023-4-17 15:45
“因为不懂英文,所以用汇编而不用C”
这本身就是个伪命题,英文好坏和你用汇编还是C也没有必然联系。
...

说的也对,全都自己写用C用汇编其实一样,主要是学会了一种了已经能满足要求了就懒得去再学另外一种了。

但是看别人C写的程序确实看不懂,我看外文网站都是自动翻译看的,自动翻译对翻译代码里的英文不友好,我要是能看懂就不去看手册一遍一遍试了,初始化时钟试了很长时间才成功,设置ADC就是不能正常采集,最后试验得开两个通道才能正常采集,到现在我都不知道我设置的哪个地方有问题。写手册直接写怎么初始化,哪个寄存器写什么不就好了,非要整那么多英文让人没法看,熟悉这种写法的专业人员当然不觉得难了,我们这些不会英文对C语言也不熟悉的看起来就难了。
回复 支持 反对

使用道具 举报

     
发表于 2023-4-17 16:21:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2023-4-17 16:49:36 | 显示全部楼层
看汇编代码有窍门的,也是一个模块一个模块的。顺着线捋。

至于说他们谁更好,谁更复杂,谁更难?
我觉着应该从另一个角度来看这个问题,就是:他们为什么 要进行比较呢?



Linux的 uname程序的汇编代码。我解析的其中一个函数的。
这个函数很简单,原因是帖子长度限制,我贴不上来那个更复杂的。

.text:000000000000270B
.text:000000000000270B ; =============== S U B R O U T I N E =======================================
.text:000000000000270B
.text:000000000000270B ; Attributes: static bp-based frame
.text:000000000000270B
.text:000000000000270B ; void __cdecl print_element(const char *element)
.text:000000000000270B print_element   proc near               ; CODE XREF: main+F8↓p
.text:000000000000270B                                         ; main+115↓p ...
.text:000000000000270B
.text:000000000000270B element         = qword ptr -8
.text:000000000000270B
.text:000000000000270B ; __unwind {
.text:000000000000270B                 push    rbp
.text:000000000000270C                 mov     rbp, rsp
.text:000000000000270F                 sub     rsp, 10h

.text:0000000000002713                 mov     [rbp+element], rdi

/*
* static bool printed;
*/
.text:0000000000002717                 movzx   eax, cs:printed_1

/*
* if (printed) putchar (' ');
*/
.text:000000000000271E                 test    al, al
.text:0000000000002720                 jz      short loc_272C
.text:0000000000002722                 mov     edi, 20h ; ' '  ; c
.text:0000000000002727                 call    _putchar_unlocked

/*
* printed = true;
*/
.text:000000000000272C
.text:000000000000272C loc_272C:                               ; CODE XREF: print_element+15↑j
.text:000000000000272C                 mov     cs:printed_1, 1

/*
* fputs (element, stdout);
*/
.text:0000000000002733                 mov     rdx, cs:stdout@GLIBC_2_2_5
.text:000000000000273A                 mov     rax, [rbp+element]
.text:000000000000273E                 mov     rsi, rdx        ; stream
.text:0000000000002741                 mov     rdi, rax        ; s
.text:0000000000002744                 call    _fputs_unlocked


.text:0000000000002749                 nop
.text:000000000000274A                 leave
.text:000000000000274B                 retn
.text:000000000000274B ; } // starts at 270B
.text:000000000000274B print_element   endp
.text:000000000000274B

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-4-17 17:18:40 | 显示全部楼层
闻太师 发表于 2023-4-17 16:21
你每做一个东西,都在各论坛发帖,共享电路和程序。说明你非常渴望跟别人交流。
然后你又经常抱怨,开源 ...

我到处发还真不是为了交流,就是纯粹为了分享,就像是喂麻雀一样,投喂的食物不合口麻雀自然不会吃,人看到地上喂麻雀的食物肯定不会去吃,适合人吃的那我还不如我自己吃了,现在我只有和麻雀分享食物的能力,所以不考虑和人分享食物这个事情,我吃的这些东西别人根本看不上。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-4-17 17:25:06 | 显示全部楼层
ssffzz1 发表于 2023-4-17 16:49
看汇编代码有窍门的,也是一个模块一个模块的。顺着线捋。

至于说他们谁更好,谁更复杂,谁更难?

汇编非常不容易阅读,一个几十行的程序可能不上调试器都看不懂,曾经我就遇到过,一条一条跟踪最后还是看不懂,后来直接设断点看执行前执行后才理解程序是干什么的

我一开始想学过LINUX,但是考虑这东西实在是用不上,不用很快就忘记了就放弃了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-5-8 15:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表