OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4785|回复: 11

start.s中清除bss段之后,led不闪烁了

[复制链接]

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2017-4-29
在线时间
23 小时
发表于 2019-12-30 10:36:20 | 显示全部楼层 |阅读模式
按照老师的视频在start.s中加入清除bss断的代码,发现led不再闪烁了。
.global _bss_start
_bss_start:
    .word __bss_start
.global _bss_end
_bss_end:
    .word __bss_end

    /*清除bss段 */
    /*清除bss段 */
    ldr r0,_bss_start
    ldr r1,_bss_end
    mov r2,#0
bss_loop:
    stmia r0!,{r2}      //r0的值设置为r2,并且r0递增
    cmp r0,r1           //比较r0和r1
    ble bss_loop        //如果r0小于r1,则跳转


检查ledc.dis,发现_start位置不对了

ledc.elf:     文件格式 elf32-littlearm

Disassembly of section .text:
87800000 <_bss_start>:
87800000: 87800209  strhi r0, [r0, r9, lsl #4]
87800004 <_bss_end>:
87800004: 87800209  strhi r0, [r0, r9, lsl #4]
87800008 <_start>:
。。。。。。

查看老师的start.s实例代码,发现里面并没与清bss的代码,所以不知哪里出问题了

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2017-4-29
在线时间
23 小时
 楼主| 发表于 2019-12-30 11:03:32 | 显示全部楼层
我又测试了下,发现
1.87800000已_bss_start>作为开始,并没有问题
2.下面几条语句注释掉,led就能闪烁了
bss_loop:
    stmia r0!,{r2}      //r0的值设置为r2,并且r0递增
    cmp r0,r1           //比较r0和r1
    ble bss_loop        //如果r0小于r1,则跳转

这几条语句就是用来清bss段的
回复 支持 反对

使用道具 举报

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2019-7-31
在线时间
16 小时
发表于 2019-12-30 12:58:19 | 显示全部楼层
视频中代码在视频盘中,A盘中的代码优化了,与原来不一致。跟着与视频代码一致,我这边没有问题。
你试试在链接文件中改成这样,左公在后面说了要字节对齐。
SECTIONS {
    . = 0x87800000;
    .text :
    {
        start.o
        *(.text)
    }
    .rodata ALIGN(4) : {*(.todata)}
    .data   ALIGN(4) : {*(.data) }
    . = ALIGN(4) ;
    __bss_start = .;
    .bss  ALIGN(4) : {*(.bss) *(COMMON)}
    . = ALIGN(4) ;
    __bss_end  = .;


}
回复 支持 反对

使用道具 举报

3

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2018-7-4
在线时间
17 小时
发表于 2019-12-30 15:34:05 | 显示全部楼层
试试把清除bss段代码放到_start函数里面去,这样_start就还是0x87800000了
回复 支持 反对

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2017-4-29
在线时间
23 小时
 楼主| 发表于 2019-12-30 17:00:54 | 显示全部楼层
我是李康 发表于 2019-12-30 15:34
试试把清除bss段代码放到_start函数里面去,这样_start就还是0x87800000了

试了下,改完还是有问题。
应该是字节对齐问题。
回复 支持 反对

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2017-4-29
在线时间
23 小时
 楼主| 发表于 2019-12-30 17:05:50 | 显示全部楼层
helloyangF 发表于 2019-12-30 12:58
视频中代码在视频盘中,A盘中的代码优化了,与原来不一致。跟着与视频代码一致,我这边没有问题。
你试试 ...

加了字节对齐. = ALIGN(4) ;后,好了。非常感谢!
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2020-3-11
在线时间
5 小时
发表于 2020-4-3 21:27:33 | 显示全部楼层
你好 我也碰到了这个问题 而且我加了字节对齐的代码后 编译时链接文件报错 说语法不对。。。。
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2020-3-11
在线时间
5 小时
发表于 2020-4-3 21:43:24 | 显示全部楼层
大佬们 我加了. = ALIGN(4) ;之后编译会报错啊 这是怎么回事
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2020-3-11
在线时间
5 小时
发表于 2020-4-3 21:44:00 | 显示全部楼层
大佬们 我加了. = ALIGN(4) ;之后编译报错啊  这是怎么回事
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-12-30
在线时间
3 小时
发表于 2020-6-4 10:08:51 | 显示全部楼层
C:\Users\asus\Desktop\未命名图片.png 出现这个是什么问题啊,bss编写进去了吗?
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-12-30
在线时间
3 小时
发表于 2020-6-4 10:10:31 | 显示全部楼层
返汇编文件里面的__bss_start两个地址都是87800000,怎么和视频里的不一样,是不是bss没写进去啊
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2018-5-27
在线时间
31 小时
发表于 2020-11-2 00:03:43 | 显示全部楼层
ljw457511 发表于 2020-4-3 21:44
大佬们 我加了. = ALIGN(4) ;之后编译报错啊  这是怎么回事

等号两边加空格
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 18:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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