OpenEdv-开源电子网

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

阿波罗F767开发板寄存器版跑马灯AC5迁移AC6的问题-无法下载后自动运行(调试时可以)

[复制链接]

0

主题

3

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2020-5-24
在线时间
4 小时
发表于 2020-6-21 16:03:25 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 WalkerOne 于 2020-6-21 19:33 编辑

MDK版本:5.3
AC5版本5.06
AC6版本6.14

阿波罗F767开发板,按照视频教学里的跑马灯实验,为什么用AC5编译,下载程序后跑马灯可以自动开始运行。用AC6编译,下载程序后不能自动运行,而且重新上电后也不能运行,但是单步调试时,程序运行正常,跑马灯可以亮灭,然后退出调试也可以正常亮灭。没显示任何错误。

——————————————————————————————————————

更新:调试时发现MODER没有更新,但单步运行可以正常更新,直接运行就不行。

MODER无法更新

MODER无法更新



附代码:
sys.c和usart.c文件的部分按照下面的改了后编译通过了:
//------------sys.c------------------------------
//设置栈顶地址
//addr:栈顶地址
/*
__asm void MSR_MSP(u32 addr)
{
MSR MSP, r0         //set Main Stack value
BX r14
}
*/
void MSR_MSP(u32 addr)
{
__ASM ("MSR MSP, r0");    //set Main Stack value
__ASM ("BX r14");
}


//------------usart.c------------------------------
//#pragma import(__use_no_semihosting)
__ASM (".global __use_no_semihosting");

//标准库需要的支持函数   
//struct __FILE
//{
//int handle;
/* Whatever you require here. If the only file you are using is */
/* standard output using printf() for debugging, no file handling */
/* is required. */
//};


//------------main.c------------------------------
#include "sys.h"
#include "delay.h"
#include "usart.h"
int main(void)
{
// HAL_Init();
  Stm32_Clock_Init(432,25,2,9);
delay_init(216);

RCC->AHB1ENR |= 1<<1;

GPIOB->MODER = 0x00000005;
GPIOB->OTYPER = 0x00000000;
GPIOB->OSPEEDR= 0x0000000F;
GPIOB->PUPDR = 0x00000005;

while(1)
{  
    GPIOB->BSRR=0x00000003; //1  
   delay_ms(500);  
   GPIOB->BSRR=0x00030000; //0  
  delay_ms(500);
}
}


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

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2020-5-24
在线时间
4 小时
 楼主| 发表于 2020-6-21 18:57:13 | 显示全部楼层
本帖最后由 WalkerOne 于 2020-6-21 19:35 编辑

调试发现AC6编译的,如果直接运行,GPIOB的MODER没有被改变,但如果单步运行可以正常赋值。
AC5编译的,没有这个问题。


回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2020-5-24
在线时间
4 小时
 楼主| 发表于 2020-6-22 21:19:35 | 显示全部楼层
终于找到原因了。

把MODER = 0x00000005里的赋值改为MODER |= 0x00000005就OK了。

AC6编译导致的:
赋值语句出来的汇编:
    19:         RCC->AHB1ENR |= 1<<1;
0x080005F2 6801      LDR           r1,[r0,#0x00]
0x080005F4 F0410102  ORR           r1,r1,#0x02
0x080005F8 6001      STR           r1,[r0,#0x00]
0x080005FA 2005      MOVS          r0,#0x05
    20:         GPIOB->MODER = 0x00000005;
0x080005FC 6020      STR           r0,[r4,#0x00]
0x080005FE 2100      MOVS          r1,#0x00
    21:         GPIOB->OTYPER = 0x00000000;
0x08000600 6061      STR           r1,[r4,#0x04]
0x08000602 210F      MOVS          r1,#0x0F
    22:         GPIOB->OSPEEDR = 0x0000000F;
0x08000604 60A1      STR           r1,[r4,#0x08]
    23:         GPIOB->PUPDR = 0x00000005;
    24:         
    25:         while(1)
    26:         {         

或赋值出来的汇编:
    19:         RCC->AHB1ENR |= 1<<1;
0x080005F2 6801      LDR           r1,[r0,#0x00]
0x080005F4 F0410102  ORR           r1,r1,#0x02
0x080005F8 6001      STR           r1,[r0,#0x00]
    20:         GPIOB->MODER |= 0x00000005;
0x080005FA 6820      LDR           r0,[r4,#0x00]
0x080005FC F0400005  ORR           r0,r0,#0x05
0x08000600 6020      STR           r0,[r4,#0x00]
0x08000602 2000      MOVS          r0,#0x00
    21:         GPIOB->OTYPER = 0x00000000;
0x08000604 6060      STR           r0,[r4,#0x04]
0x08000606 200F      MOVS          r0,#0x0F
    22:         GPIOB->OSPEEDR = 0x0000000F;
0x08000608 60A0      STR           r0,[r4,#0x08]
0x0800060A 2005      MOVS          r0,#0x05
    23:         GPIOB->PUPDR = 0x00000005;
    24:         
    25:         while(1)
回复

使用道具 举报

6

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2016-12-14
在线时间
37 小时
发表于 2020-7-18 23:23:32 | 显示全部楼层
请问使用AC6编译的话,usart.c内的#pragma import(__use_no_semihosting)    还有struct __FILE  ,这个需要怎么修改可以让编译通过?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-7-20 01:59:18 | 显示全部楼层
晴天大熊猫 发表于 2020-7-18 23:23
请问使用AC6编译的话,usart.c内的#pragma import(__use_no_semihosting)    还有struct __FILE  ,这个需 ...

你这都是用的汇编么?
如果冲突的话,可以去掉这个半主机模式。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2016-12-14
在线时间
37 小时
发表于 2020-8-26 23:49:18 | 显示全部楼层
正点原子 发表于 2020-7-20 01:59
你这都是用的汇编么?
如果冲突的话,可以去掉这个半主机模式。

没有用汇编。。。就是用了AC6编译会报错所以想问一下怎么解决。。。
回复

使用道具 举报

0

主题

286

帖子

0

精华

高级会员

Rank: 4

积分
950
金钱
950
注册时间
2018-4-21
在线时间
264 小时
发表于 2020-11-1 10:39:36 | 显示全部楼层
晴天大熊猫 发表于 2020-8-26 23:49
没有用汇编。。。就是用了AC6编译会报错所以想问一下怎么解决。。。

你好,这两个报错解决了吗?能说说怎么改才能编译通过吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-29 23:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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