[STM8] IAR STM8 C++ IO操作:

[复制链接]
2898|1
 楼主| CC2530 发表于 2011-7-2 14:33 | 显示全部楼层 |阅读模式
  1. #include "util_ioreg.hpp"

  2. #include "stm8l15x_conf.h"

  3. uint8 x;

  4. void test_io1(void)
  5. {
  6. //IO_REG_BIT_t<uint8>::AttachIo(&io).set(0).clr(1).toggle(2).write(3,0).write(4,1).read(5,x).write(6,x);
  7. //第0位清零,第1位置1,第2位翻转,第3位写0,第4位写1,第5位读取到x,第6位写x
  8. //优化用小写

  9. IO_REG_BIT_t<uint8>::AttachIo(&GPIOD->ODR).Set(0).Clr(1).Toggle(2).Write(3,0).Write(4,1).Read(5,x).Write(6,x);
  10. //第0位清零,第1位置1,第2位翻转,第3位写0,第4位写1,第5位读取到x,第6位写x
  11. //防优化用大写

  12. }
  13. void test_io2(void)
  14. {
  15. //IO_REG_FIELD_t<uint8,2,3>::AttachIo(&io).write(3).write(4).read(x).write(~x);
  16. //第2位开始,3个位的值,写3,写4,读取到x,写入~x
  17. //优化用小写

  18. IO_REG_FIELD_t<uint8,2,3>::AttachIo(&GPIOD->ODR).Write(3).Write(4).Read(x).Write(~x);
  19. //第2位开始,3个位的值,写3,写4,读取到x,写入~x
  20. //防优化用大写
  21. }
  22. int main()
  23. {
  24. test_io1();
  25. test_io2();

  26. while(1);
  27. }
 楼主| CC2530 发表于 2011-7-2 14:34 | 显示全部楼层
本帖最后由 CC2530 于 2011-7-2 14:35 编辑
  1. IO_REG_BIT_t<uint8>::AttachIo(&GPIOD->ODR).Set(0).Clr(1).Toggle(2).Write(3,0).Write(4,1).Read(5,x).Write(6,x);
//第0位清零,第1位置1,第2位翻转,第3位写0,第4位写1,第5位读取到x,第6位写x

编译汇编:
//   13     IO_REG_BIT_t<uint8>::AttachIo(&GPIOD->ODR).Set(0).Clr(1).Toggle(2).Write(3,0).Write(4,1).Read(5,x).Write(6,x);
_Z8test_io1v:
        BSET      L:0x500f, #0x0
        BRES      L:0x500f, #0x1
        LD        A, L:0x500f
        XOR       A, #0x4
        LD        L:0x500f, A
        BRES      L:0x500f, #0x3
        BSET      L:0x500f, #0x4
        BTJF      L:0x500f, #0x5, L:??test_io1_0
        MOV       L:`x`, #0x1
        BSET      L:0x500f, #0x6
        RET
??test_io1_0:
        CLR       L:`x`
        BRES      L:0x500f, #0x6
        RET
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:该死的ST,还不赶快出STM8L小FLASH片子

0

主题

262

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部