IAR写的C++程序,不知道构造函数如何让位变量指向端口?

2020-01-20 19:10发布

/************************************
初学C++,这是个测试程序,设计的想法是,把最普遍的IO口,作一个对象来看待。
指定一个端口,构造一个端口对象
*************************************/
#include<ioat89c51.h>

class Led{
private:
        bool LED_IO;  //位变量,但如何指向构造函数的参数。
public:
        Led(bool b){  //此处怎样写,让LED_IO 指向b(即P3_bit.P3_0)               
        }
        void on(){
                LED_IO=1;
        }
        void off(){
                LED_IO=0;
        }       
};

void delayms(int ms){
        while(ms--)
                for(int i=0;i<1000;i++);
}

int main(){
        Led led1(P3_bit.P3_0);
        while(1){
                led1.on();
                delayms(100);
                led1.off();
                delayms(100);
        }
}

这样写,不是为了标新立异,是想从这里开始把MCU所有内部资源作为对象的方式编程。但构造函数不知道如何写,才能把LED_IO与P3.0等同起来。对LED_IO的操作可以影响P3.0.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
uc_stm32f050
1楼-- · 2020-01-21 18:27
...........但端口没法子作为参数传递给构造函数。在学习仿函数的用法。
-----------------------------------------------------------------------

用模板。

template <typename T,T &IO_POUT,T &IO_PIN,T &IO_DIR,T &IO_INP,T &IO_SEL,uint8 IO_BIT,uint8 IO_POLARITY=1>
class  IO_TICC_CLASS
{
   
};


#define IO_TICC_OBJECT_DEF(A,B)             (IO_TICC_CLASS<uint8 volatile __sfr,P##A,P##A,P##A##DIR,P##A##INP,P##A##SEL,B>::IO_CLASS())


#define  IO_TEST  IO_TICC_OBJECT_DEF(1,0)     //P1_0
guolun
2楼-- · 2020-01-21 23:44
我原来想创建一个指针,指向特殊功能寄存器,查阅了IAR的帮助文档“compiler reference”,对sfr有这么一段描述:
(原文件名:sfr.png)
对于端口和位寻址区的描述是
(原文件名:bit.png)
官方文档清楚的指出,没有sfr指针和位寻址区bit指针。
用模板应该是很不错的方法。看了的7楼的方法。翻书学习模板的内容。似懂非懂。下面不好理解。
template <typename T,T &IO_POUT,T &IO_PIN,T &IO_DIR,T &IO_INP,T &IO_SEL,uint8 IO_BIT,uint8 IO_POLARITY=1>
uc_stm32f050 深圳招M3开发 可否解我疑惑?
Pony279
3楼-- · 2020-01-22 05:06
 精彩回答 2  元偷偷看……
dory_m
4楼-- · 2020-01-22 07:28
戒骄戒躁,潜心学习!!!
swortering
5楼-- · 2020-01-22 10:43
3楼的同学,你用的什么编译器?

一周热门 更多>