查看: 3118|回复: 8

[CodeWarrior] 【已解决】Codewarrior10.5加入跳转的汇编代码问题

[复制链接]

该用户从未签到

3

主题

12

帖子

0

新手上路

Rank: 1

积分
47
最后登录
2015-10-28
发表于 2015-6-8 11:35:26 | 显示全部楼层 |阅读模式
本帖最后由 qallern 于 2015-6-9 10:24 编辑

我之前的测试bootloader是在KEIL5.1上写的,现在想把他移植到Codewarrior上面去,CW上面的bootloader使用处理器管家PE建立的工程,
移植跳转函数的时候,编译出现错误,KEIL下面的代码如下:
/*********************************************************************************
*Name:  JumpToUserApplication
*Description:跳转到应用程序执行
*Input:
*Return:NONE
*Author:TWEI
*Date:2015-01-29      
**********************************************************************************/
__asm void JumpToUserApplication(uint32_t userSP, uint32_t userStartup)
{
  msr msp, r0
  msr psp, r0
  bx  r1  
}

移植到codewarrior上面的代码如下:
/************************************************************************
*Name:  JumpToUserApplication
*Description:跳转到应用程序执行
*Input:
*Return:NONE
*Author:TWEI
*Date:2015-06-08      
*************************************************************************/
asm void JumpToUserApplication(uint32_t userSP, uint32_t userStartup)
{
        // set up stack pointer
        msr msp, r0;
        msr psp, r0;
        // Jump to PC (r1)               
        mov pc, r1;
}

这个是参考了AN2295上面的代码,但是codewarrior上面编译就出现了错误
出错提示如下:
../Sources/ProcessorExpert.c:61:5: error: expected '(' before 'void'
mingw32-make: *** [Sources/ProcessorExpert.o] Error 1 有没有知道的帮忙解答下,不胜感谢!

我知道答案 目前已有8人回答
回复

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-6-8 12:45:36 | 显示全部楼层
楼主参考这个文档:
CW10.x编译环境查找HardFault异常原因

文档图7,有添加汇编的例子,你按照那个格式写下,错误就没了。

回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

12

帖子

0

新手上路

Rank: 1

积分
47
最后登录
2015-10-28
 楼主| 发表于 2015-6-8 14:39:30 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-6-8 12:45
楼主参考这个文档:
CW10.x编译环境查找HardFault异常原因

您好,按照你的帮助,可以把代码编译通过!跳转的代码是这样写的
----------
void JumpToUserApplication(uint32_t userSP, uint32_t userStartup)
{
        __asm volatile(
                "msr msp, r0                \n"
                "msr psp, r0                \n"
                "bx  r1                \n"
                        );
}
还是跳转不到指定的地址,我使用的是KL26Z256的芯片,需要跳转的地址在0x20000,在KEIL里面是可以跳转运行的,也跑起来测试过,在codewarrior里面单步调试执行到汇编就会有如下图的问题
123.jpg

回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-6-8 16:50:00 | 显示全部楼层
qallern 发表于 2015-6-8 14:39
您好,按照你的帮助,可以把代码编译通过!跳转的代码是这样写的
----------
void JumpToUserApplication ...

你出问题的时候,看看SP,PC寄存器的值是否已经跳转过去了呢?
还是只是debug出这个问题而已,如果是debug出问题,你可以烧录进去调试,可能是IDE的仿真问题。
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

12

帖子

0

新手上路

Rank: 1

积分
47
最后登录
2015-10-28
 楼主| 发表于 2015-6-8 17:35:08 | 显示全部楼层
您好,我测试了下,codewarrior的PE组件加上USB协议栈的组件就会有问题!不加的话就能正常的跳转,组件名是FSL_USB_Stack  版本是V4.1.1
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-6-9 09:23:45 | 显示全部楼层
qallern 发表于 2015-6-8 17:35
您好,我测试了下,codewarrior的PE组件加上USB协议栈的组件就会有问题!不加的话就能正常的跳转,组件名是 ...

你把你CW的版本更新到CW10.6试试。
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

12

帖子

0

新手上路

Rank: 1

积分
47
最后登录
2015-10-28
 楼主| 发表于 2015-6-9 10:23:15 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-6-9 09:23
你把你CW的版本更新到CW10.6试试。

您好,刚刚我试了下把USB的initialization先关掉就可以跳转
456.png
可能跟中断还是有点关系吧,我再看看其他方式吧,您提供的更新CW我也试试,非常感谢您提供的帮助!
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-6-9 10:52:30 | 显示全部楼层
qallern 发表于 2015-6-9 10:23
您好,刚刚我试了下把USB的initialization先关掉就可以跳转

可能跟中断还是有点关系吧,我再看看其他方式 ...

不客气,很可能是你没有处理USB代码,导致进入中断了。
后续有问题,欢迎继续发帖交流。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-6-9 10:53:14 | 显示全部楼层
非常感谢你关于IDE的技术问题。如果你没有其他问题,我们将此帖默认为已解决.
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-12 20:11 , Processed in 0.115335 second(s), 30 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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