查看: 97|回复: 8
收起左侧

[综合信息] ChipON-IDE编译器效率实现说明

[复制链接]

16

主题

174

帖子

522

积分

高级技术员

 楼主| 发表于 2017-6-25 19:04 | 显示全部楼层 |返回版面|阅读模式
一、位取反:  

  1. Flagbit0 = ~Flagbit0 ;//效率低
  2. Flagbit0 = ! Flagbit0 ;//效率高
  3. if(Flagbit0 ==0) //效率最高
  4. { Flagbit0 = 1;}
  5. else
  6. { Flagbit0 = 0;}
复制代码


21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

16

主题

174

帖子

522

积分

高级技术员

 楼主| 发表于 2017-6-25 19:05 | 显示全部楼层 |返回版面
二、位判断:
  1. if(DCIN!=1) //效率低
  2. if(DCIN==0) //效率高
复制代码

21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

16

主题

174

帖子

522

积分

高级技术员

 楼主| 发表于 2017-6-25 19:06 | 显示全部楼层 |返回版面
三、定义
在RAM空间够的情况下,用结构体定义的位变量没有定义成字节型效率高,采用指针表达效率较低,尽量少用
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

16

主题

174

帖子

522

积分

高级技术员

 楼主| 发表于 2017-6-25 19:06 | 显示全部楼层 |返回版面
四、表达式
  1. if(vot_value<(vot_temp-1)) //效率低
  2. vot_temp=vot_temp-1;
  3. if(vot_value<vot_temp) //效率高
  4. 公共表达式 提前获取结果到中间变量中。
复制代码
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

16

主题

174

帖子

522

积分

高级技术员

 楼主| 发表于 2017-6-25 19:07 | 显示全部楼层 |返回版面
五、逻辑运算
  1. 函数带返回值
  2. dc_value=adc(2)/2; //效率低
  3. dc_value=adc(2);
  4. dc_value=dc_value/2; //效率高
复制代码
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

16

主题

174

帖子

522

积分

高级技术员

 楼主| 发表于 2017-6-25 19:07 | 显示全部楼层 |返回版面
六、简单结构体、结构联合体
1、结构体定义不应太复杂,建议简单数据集合,不包含大数组、结构体。
2、位结构体实现程序标记,实现置1、清零操作。
3、结构联合体,整数和字节组合实现AD值的获取。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

16

主题

174

帖子

522

积分

高级技术员

 楼主| 发表于 2017-6-25 19:08 | 显示全部楼层 |返回版面
七、嵌汇编实现
  1. __asm
  2. BANKSEL Var_1
  3. MOV R0,#0x32
  4. MOV Var_1,R0
  5. CLR PSW,0
  6. RLRC Var_1 ;;// 偏移量
  7. ADD R0, #(_Arr_Var+0) ;;//操作地址
  8. BANKSEL _Arr_Var
  9. LD R1,[R0]
  10. PAGESEL _Fun_A
  11. CALL _Fun_A
  12. PAGESEL $ ;//函数调用
  13. __endasm;
复制代码
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

7

主题

122

帖子

366

积分

资深技术员

发表于 2017-6-29 16:57 | 显示全部楼层 |返回版面
学习了,有时候碰到运到算法的时候,这些细节就管用了。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0

11

主题

116

帖子

348

积分

资深技术员

发表于 2017-6-29 18:44 | 显示全部楼层 |返回版面
总的来说,总结成一句话就是,不支持堆叠的操作,最好每次尽量少的寄存器参与,减少堆栈的次数吧。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里 http://open.21ic.com 移步更多21ic独家微课:http://open.21ic.com/list/3/0/0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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