OpenEdv-开源电子网

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

LINUX第二期第9.1和9.2讲中的问题

[复制链接]

3

主题

10

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2020-4-27
在线时间
6 小时
发表于 2020-4-30 22:51:04 | 显示全部楼层 |阅读模式
1金钱
我按照视频里面的方法,在start.s中加了对bss段的清除,当然也对imx6u.lds链接文件相关进行了修改,烧录到开发板,发现灯不闪

我把bss清除段删除,灯就会闪烁。

我的start.s 是这样写的:

.global _start                  /* 全局标号 */
.global _bss_start /*定义了一个32位的word全局标号_bss_start并以__bss_start的值初始化 */
_bss_start:
    .word __bss_start

.global _bss_end/*定义了一个32位的word全局标号_bss_end并以__bss_end的值初始化 */
_bss_end:
    .word __bss_end

/*
* 描述:        _start函数,程序从此函数开始执行,此函数主要功能是设置C
*                 运行环境。
*/
_start:

        /* 进入SVC模式 */
        mrs r0, cpsr
        bic r0, r0, #0x1f         /* 将r0寄存器中的低5位清零,也就是cpsr的M0~M4         */
        orr r0, r0, #0x13         /* r0或上0x13,表示使用SVC模式                                        */
        msr cpsr, r0                /* 将r0 的数据写入到cpsr_c中                                         */

    /*清除bss段 */
   ldr r0, _bss_start   /*将_bss_start的值赋值给r0 */
    ldr r1, _bss_end     /*将_bss_end的值赋值给r1 */
    mov r2, #0          /*将r2设为0 */
bss_loop:
    stmia r0!, {r2}      /*先将r2寄存器的值(0)赋值给r0数值所对应的地址,然后r0自动加1 */
    cmp r0, r1    /*比较r0和r1的值 */
    ble bss_loop  /*如果r0地址小于等于r1,则继续清除bss段 */

        ldr sp, =0x80200000        /* 设置栈指针                         */
        b main                                /* 跳转到main函数                  */



imx6u.lds是这样写的:

SECTIONS {
    . = 0x87800000;
    .text : {
        start.o
        main.o
        *(.text)
    }

    .rodata ALIGN(4) : {*(.rodata)}
    .data ALIGN(4) : {*(.data)}
    __bss_start=.;
    .bss ALIGN(4) : {*(.bss) *(COMMON)}
    __bss_end=.;
}


求大神指教哪里出了问题,谢谢!

最佳答案

查看完整内容[请看2#楼]

bss段位置放错了,看第二期视频的中断实验,里面的.s汇编文件对bss段的位置做了修改
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2020-4-30 22:51:05 | 显示全部楼层
bss段位置放错了,看第二期视频的中断实验,里面的.s汇编文件对bss段的位置做了修改
回复

使用道具 举报

18

主题

155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3882
金钱
3882
注册时间
2016-7-8
在线时间
817 小时
发表于 2020-5-1 18:04:15 | 显示全部楼层
我也学习到这里,文件没有修改之前烧录进去闪烁吗
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2020-4-27
在线时间
6 小时
 楼主| 发表于 2020-5-1 20:43:35 | 显示全部楼层
zuozhongkai 发表于 2020-5-1 19:16
bss段位置放错了,看第二期视频的中断实验,里面的.s汇编文件对bss段的位置做了修改

好的,谢谢
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2020-4-27
在线时间
6 小时
 楼主| 发表于 2020-5-1 20:44:01 | 显示全部楼层
yanzhuangsongqi 发表于 2020-5-1 18:04
我也学习到这里,文件没有修改之前烧录进去闪烁吗

把bss清除段注释掉就可以
回复

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2019-11-2
在线时间
30 小时
发表于 2020-5-3 14:36:25 | 显示全部楼层
我也是遇到这个问题,一直以为是其他地方的问题,原来是bss段位置有错误。有点坑呀!
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2020-4-27
在线时间
6 小时
 楼主| 发表于 2020-5-3 19:16:48 | 显示全部楼层
stopwork 发表于 2020-5-3 14:36
我也是遇到这个问题,一直以为是其他地方的问题,原来是bss段位置有错误。有点坑呀!

其实bbs段位置有问题,这个描述不够详细,应该是bss配置的时候没有按照4字节排列,从而导致地址分配错误,使得bss段的位置不正确了。这个问题在视频第13.2按键输入实验中已经讲了。
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-5-10
在线时间
1 小时
发表于 2020-5-10 19:56:52 | 显示全部楼层
我也有一样的问题 用的mini板  把链接文件imx6u.lds中的main.o去掉后上电发现可以正常运行
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-5-10
在线时间
1 小时
发表于 2020-5-10 19:57:32 | 显示全部楼层
Vampiremu 发表于 2020-5-10 19:56
我也有一样的问题 用的mini板  把链接文件imx6u.lds中的main.o去掉后上电发现可以正常运行

不知道具体是什么原因
回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2019-10-17
在线时间
22 小时
发表于 2020-5-10 20:04:14 来自手机 | 显示全部楼层
这个问题找了俩天。很烦,强迫症伤不起啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 12:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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