keil中的混合编程

Trehe 2015-03-05 10:45:02
#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; \
})

小弟在移植一段代码,主控芯片是STM32F407,中间有一段汇编代码,如上,是一个宏定义,然后在下边调用,出现这样的错误error: #29: expected an expression uint32_t temp_dist = ABSDIFF(base1, base2+ii);
请教大神该怎么解决
...全文
283 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Aobilage 2015-12-15
  • 打赏
  • 举报
回复
能请教一下下面每段代码的含义么? "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 */ \ 求大神解答!!!!
Trehe 2015-03-06
  • 打赏
  • 举报
回复
自顶!!!!!!!!!!

21,619

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧