最近在学习NXP的M0芯片,谢谢周立功提供的开发板和简易仿真器(虽然只能设置2个断点)。发现M0在对IO操作的时候编码的效率并不是很高。正常情况下配置一个端口的状态需要3条语句。读端口寄存器,修改寄存器的内容,回写I/O寄存器。
但是在C语言如果表述为:
#define KEY_COL2 (1ul << 10) //P2_10
#define SET_KEY_COL2() GPIO2DATA|=KEY_COL2
程序里面调用
SET_KEY_COL2()
看反汇编就成了7句代码了
MOV R0 , R1 //此语句不明白有啥用?
LDR R0 , [R0 , #0x0000003C] //读IO寄存器到R0
MOVS R1 , #0x00000001 //
LSLS R1 , R1 , #0x0000000A //一个立即数居然要这么产生,效率太低了吧
ORRS R0 , R1 //更改数据(M0没有立即数操作指令?)
LDR R1 , [PC , #0x00000254] //此话就不清楚是什么意思了?
STR R0 , [R1 , #0x0000003C] //回写寄存器
感觉里面有用的也就3句
00001494 0x6BC0 LDR R0 , [R0 , #0x0000003C] //读寄存器
0000149A 0x4308 ORRS R0 , R1 //设置新值 , ARM里面是不是没有立即数操作指令?
0000149E 0x63C8 STR R0 , [R1 , #0x0000003C] //回写寄存器
那里有M0的指令集的资料?TKSTADIO是否可以支持汇编开发? |