原文恕删,相信您已经知道enum里面定的东西可以用作mask,那enum里面的识别字的确是
可以自己定,但是像这种特殊暂存器它每个bit都可能有自己的用途自己乱改的后果就是
,你就没办法好好用囉~除非你是做SOC可以让硬件配合你。
我觉得这种硬件相关的东西单纯看header file是不太能有深刻了解的,不如看程式范例
、看spec来的实际。
我主要想回的是这个推文
: 推 james732: 其实我不太懂这里为什么要用enum 08/31
13:2
: → james732: 用#define或const应该也都可以 08/31
13:2
的确,用#define或const是可以达到用enum差不多的效果,就我以前写PIC、CC254X经验
呢,使用enum话compiler会在你想要用以隐式转型的时候给你警告,我想这是因为单芯片
一些暂存器的值不能让你随便操作的关系。
我以前在写8051的时候大多数时候是看到用#define的做法,在写PIC的时候比较常看到用
enum的方法,写ARM的时候看到用const的方法。这个内存暂的大小其实是看你暂存器的
宣告,好像通常是宣告成unsigned char或是用struct放,没看过用enum去宣告的。
那至于型别检查呢,其实可以靠自己写ASSERT去check,不一定要用enum,不过我还是比
较喜欢用enum的方法,因为这样很容易看懂。
要注意的地方是,gcc编译C的程式的时候int隐式转型成enum时不会给警告,跟一些嵌入
式的compiler不一样。最后这个连结式我花了点时间写的C和C++的enum测试,里面有gcc、
MPLAB、IAR的compiler编译出来的结果比较。
https://github.com/Lipraxde/enum_test