7870|25

693

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

50字节实现STM32L011 Blink. [复制链接]

 
仅仅50字节,就可以实现LED闪烁.代码展示.纯挑战极限.
不要问为什么没C代码,没用C写,不要问为什么没汇编代码,汇编出来比这个大,这个是汇编后再优化的.PB3接一个LED,主芯片是STM32L011K4,也是那个Nucleo-L011.

手上有板子可以试试.反正我当时11.11团购的,估计很多人有.

hex: stm32l011-nucleo-blink.zip (277 Bytes, 下载次数: 16)







最新回复

我觉得依赖未定义的部分是 00 还是 FF 这个办法不好,如果是任意值都能跑就pass,否则算犯规  详情 回复 发表于 2017-1-20 09:10

赞赏

1

查看全部赞赏

点赞 关注

回复
举报

7794

帖子

2

TA的资源

五彩晶圆(高级)

推荐
 
本帖最后由 freebsder 于 2017-1-18 00:24 编辑

比较有趣的话题。
搞这种事的人现在搞得人不多,因为资源越来越丰富。。。
楼主这个,1是怎么看thumb指令,2是直接在int vector里面写reset handler,这点其实和arm7时代的fast irq一个的意思,3是只处理IO的模式和输出高低,其实反到汇编之后是一目了然的。
两条命令:
arm-none-eabi-objcopy -I ihex -O binary stm32l011-nucleo-blink.hex stm32l011-nucleo-blink.bin
arm-none-eabi-objdump -b binary -m arm -M force-thumb -EL -D stm32l011-nucleo-blink.bin

  1.    
  2.    0:        0009              movs        r1, r1
  3.    2:        0000              movs        r0, r0
  4.    4:        0009              movs        r1, r1               ;reset地址0x8,最低位置1表示thumb,所以数据是0x9
  5.    6:        0000              movs        r0, r0
  6.    8:        4806              ldr        r0, [pc, #24]        ; (0x24)    0x4002102c
  7.    a:        4907              ldr        r1, [pc, #28]        ; (0x28)    0x2
  8.    c:        6001              str        r1, [r0, #0]
  9.    e:        4807              ldr        r0, [pc, #28]        ; (0x2c)    0x50000400
  10.   10:        4907              ldr        r1, [pc, #28]        ; (0x30)   7fff (后面都可默认flash擦写为FF)
  11.   12:        6001              str        r1, [r0, #0]
  12.   14:        6942              ldr        r2, [r0, #20]
  13.   16:        404a              eors        r2, r1
  14.   18:        6142              str        r2, [r0, #20]
  15.   1a:        4b06              ldr        r3, [pc, #24]        ; (0x34)
  16.   1c:        1c5b              adds        r3, r3, #1
  17.   1e:        4293              cmp        r3, r2
  18.   20:        d1fc              bne.n        0x1c                 ;和 0x1c 做计数循环
  19.   22:        e7f7              b.n        0x14                    ;和 0x14 做外部循环的IO异或闪灯
复制代码
$hexdump stm32l011-nucleo-blink.bin

  1. 0000000 09 00 00 00 09 00 00 00 06 48 07 49 01 60 07 48
  2. 0000010 07 49 01 60 42 69 4a 40 42 61 06 4b 5b 1c 93 42
  3. 0000020 fc d1 f7 e7 2c 10 02 40 02 00 00 00 00 04 00 50
  4. 0000030 7f ff                                          
  5. 0000032
复制代码




点评

free树树,我看这代码还可以继续优化,搞起来!  详情 回复 发表于 2017-1-18 01:04
free树树果然是老当益壮,不服不行!  详情 回复 发表于 2017-1-18 00:46

赞赏

1

查看全部赞赏

 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 

回复

1万

帖子

25

TA的资源

版主

沙发
 
适当介绍一下吧
 
 
 

回复

6041

帖子

191

TA的资源

版主

板凳
 
本帖最后由 lcofjp 于 2017-1-18 00:46 编辑

不懂帮顶,手里没有stm32,看free树树给我们讲解。
 
 
 

回复

7794

帖子

2

TA的资源

五彩晶圆(高级)

5
 
@soso @eric_wang 实在受不了这个编辑器了,老掉字,怎么编辑都不行。
被吃掉的编辑也贴不上去,注释写好也没了,真是麻烦。


点评

测试了几次确实存在这个问题 因为涉及到JS的修改,这种修改有点像牵一发而动全身,会造成其他插件出现bug,所以暂时用了一个比较初级的方案:插入代码点提交会像图中这种展示出来,虽然不好看,但是能保证代码不被  详情 回复 发表于 2017-1-18 11:04
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

6041

帖子

191

TA的资源

版主

6
 
freebsder 发表于 2017-1-18 00:06
比较有趣的话题。
搞这种事的人现在搞得人不多,因为资源越来越丰富。。。
楼主这个,1是怎么看thumb指令 ...

free树树果然是老当益壮,不服不行!
 
 
 

回复

6041

帖子

191

TA的资源

版主

7
 
查看本帖全部讨论,请登录或者注册

点评

堆栈没用,所以烧写的时候可以偏移4个字节出来,最后的FF抹掉利用Flash擦后的默认值减掉1个,0x2那里换成字节寻址减掉3个,初略看8个字节减少8/50=16%了  详情 回复 发表于 2017-1-18 09:25
 
 
 

回复

6041

帖子

191

TA的资源

版主

8
 
查看本帖全部讨论,请登录或者注册

点评

http://www.pouet.net/prodlist.php?type%5B%5D=32b&platform%5B%5D=MS-Dos&page=1 这个论坛有很多类似作品  详情 回复 发表于 2017-1-18 10:40
 
 
 

回复

693

帖子

0

TA的资源

一粒金砂(高级)

9
 
查看本帖全部讨论,请登录或者注册
 
 
 

回复

693

帖子

0

TA的资源

一粒金砂(高级)

10
 
查看本帖全部讨论,请登录或者注册
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(中级)

11
 
查看本帖全部讨论,请登录或者注册
 
 
 

回复

7794

帖子

2

TA的资源

五彩晶圆(高级)

12
 
查看本帖全部讨论,请登录或者注册

点评

这还真不行,l011从0x04开始取,后面可以,不过得保证擦为0  详情 回复 发表于 2017-1-18 09:39
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

693

帖子

0

TA的资源

一粒金砂(高级)

13
 
查看本帖全部讨论,请登录或者注册

点评

我手里没器件,就不尝试了。 只针对你这个话题,0x2那个,你可以改成立即数寻址,把0x2直接做到指令里面,把这个字节也减掉。前面的堆栈抹掉之后,烧录的时候从0x08000004开始烧。 另外,擦除不应该是0xff吗?你这  详情 回复 发表于 2017-1-18 10:17
 
 
 

回复

7794

帖子

2

TA的资源

五彩晶圆(高级)

14
 
查看本帖全部讨论,请登录或者注册

点评

前4可以是其他数,但不能为0,不能为全f,st用来区分不知道什么东西.所以还是得从0x08000000烧,哎  详情 回复 发表于 2017-1-18 10:47
我也是写时候才发现这个擦是0x00,为什么会按WORD取呢,因为里面有个prefetch,然后那个一次性取一次word当指令用... 关掉就可以按byte,但是更多了.  详情 回复 发表于 2017-1-18 10:45
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

165

帖子

0

TA的资源

一粒金砂(中级)

15
 
查看本帖全部讨论,请登录或者注册

点评

终于等到地址了,以前收藏过,丢了就再没找到了。谢谢  详情 回复 发表于 2017-1-18 11:12
 
 
 

回复

693

帖子

0

TA的资源

一粒金砂(高级)

16
 
查看本帖全部讨论,请登录或者注册

点评

m0+支持字节寻址能力,ldr,str后面加b后缀,预取是预取,封装在API(architect programming interface)之下的,你看不到也操作不了。 如果这个器件erase擦除是0,我只能说太尼玛特立独行的奇葩了。 如果sp需要符合  详情 回复 发表于 2017-1-18 11:26
 
 
 

回复

693

帖子

0

TA的资源

一粒金砂(高级)

17
 
查看本帖全部讨论,请登录或者注册
 
 
 

回复

9208

帖子

6

TA的资源

管理员

18
 
查看本帖全部讨论,请登录或者注册
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

7794

帖子

2

TA的资源

五彩晶圆(高级)

19
 
查看本帖全部讨论,请登录或者注册
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

7794

帖子

2

TA的资源

五彩晶圆(高级)

20
 
查看本帖全部讨论,请登录或者注册

点评

刚试验一下,依然hardfault,这个擦后是0,我猜他rom也是eeprom构造,因为片内有eeprom,连续编址的  详情 回复 发表于 2017-1-18 13:02
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【干货上新】电源解决方案和技术第二趴 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 6

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表