OpenEdv-开源电子网

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

keil中c&汇编混合编程

[复制链接]

27

主题

85

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2014-8-14
在线时间
8 小时
发表于 2015-3-5 10:07:06 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]#define ABSDIFF(frame1, frame2) \ ({ \ int result = 0; \ asm volatile( \ "mov %[result], #0\n" /* accumulator */ \ \ "ldr r4, [%[src], #0]\n" /* read data from address + offset*/ \ "ldr r5, [%[dst], #0]\n" \ "usada8 %[result], r4, r5, %[result]\n" /* difference */ \ "ldr r4, [%[src], #4]\n" /* read data from address + offset */ \ "ldr r5, [%[dst], #4]\n" \ "usada8 %[result], r4, r5, %[result]\n" /* difference */ \ \ "ldr r4, [%[src], #(64 * 1)]\n" /* read data from address + offset*/ \ "ldr r5, [%[dst], #(64 * 1)]\n" \ "usada8 %[result], r4, r5, %[result]\n" /* difference */ \ "ldr r4, [%[src], #(64 * 1 + 4)]\n" /* read data from address + offset */ \ "ldr r5, [%[dst], #(64 * 1 + 4)]\n" \ "usada8 %[result], r4, r5, %[result]\n" /* difference */ \ \ "ldr r4, [%[src], #(64 * 2)]\n" /* read data from address + offset*/ \ "ldr r5, [%[dst], #(64 * 2)]\n" \ "usada8 %[result], r4, r5, %[result]\n" /* difference */ \ "ldr r4, [%[src], #(64 * 2 + 4)]\n" /* read data from address + offset */ \ "ldr r5, [%[dst], #(64 * 2 + 4)]\n" \ "usada8 %[result], r4, r5, %[result]\n" /* difference */ \ \ "ldr r4, [%[src], #(64 * 3)]\n" /* read data from address + offset*/ \ "ldr r5, [%[dst], #(64 * 3)]\n" \ "usada8 %[result], r4, r5, %[result]\n" /* difference */ \ "ldr r4, [%[src], #(64 * 3 + 4)]\n" /* read data from address + offset */ \ "ldr r5, [%[dst], #(64 * 3 + 4)]\n" \ "usada8 %[result], r4, r5, %[result]\n" /* difference */ \ \ "ldr r4, [%[src], #(64 * 4)]\n" /* read data from address + offset*/ \ "ldr r5, [%[dst], #(64 * 4)]\n" \ "usada8 %[result], r4, r5, %[result]\n" /* difference */ \ "ldr r4, [%[src], #(64 * 4 + 4)]\n" /* read data from address + offset */ \ "ldr r5, [%[dst], #(64 * 4 + 4)]\n" \ "usada8 %[result], r4, r5, %[result]\n" /* difference */ \ \ "ldr r4, [%[src], #(64 * 5)]\n" /* read data from address + offset*/ \ "ldr r5, [%[dst], #(64 * 5)]\n" \ "usada8 %[result], r4, r5, %[result]\n" /* difference */ \ "ldr r4, [%[src], #(64 * 5 + 4)]\n" /* read data from address + offset */ \ "ldr r5, [%[dst], #(64 * 5 + 4)]\n" \ "usada8 %[result], r4, r5, %[result]\n" /* difference */ \ \ "ldr r4, [%[src], #(64 * 6)]\n" /* read data from address + offset*/ \ "ldr r5, [%[dst], #(64 * 6)]\n" \ "usada8 %[result], r4, r5, %[result]\n" /* difference */ \ "ldr r4, [%[src], #(64 * 6 + 4)]\n" /* read data from address + offset */ \ "ldr r5, [%[dst], #(64 * 6 + 4)]\n" \ "usada8 %[result], r4, r5, %[result]\n" /* difference */ \ \ "ldr r4, [%[src], #(64 * 7)]\n" /* read data from address + offset*/ \ "ldr r5, [%[dst], #(64 * 7)]\n" \ "usada8 %[result], r4, r5, %[result]\n" /* difference */ \ "ldr r4, [%[src], #(64 * 7 + 4)]\n" /* read data from address + offset */ \ "ldr r5, [%[dst], #(64 * 7 + 4)]\n" \ "usada8 %[result], r4, r5, %[result]\n" /* difference */ \ \ : [result] "+r" (result) \ : [src] "r" (frame1), [dst] "r" (frame2) \ : "r4", "r5" \ ); \ \ result; \ })[/mw_shl_code]
然后在后边调用:uint32_t temp_dist = ABSDIFF(base1, base2+ii);
出错: error:  #29: expected an expression.                                         
                    temp_dist = ABSDIFF(base1, base2+ii);
请教大神怎么解决

最近没吃药,感觉自己萌萌哒!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-3-5 23:01:39 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 06:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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