免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1825 | 回复: 3
打印 上一主题 下一主题

哪位大侠能帮俺提取出这个类,谢谢,有代码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-26 13:41 |只看该作者 |倒序浏览
10可用积分
class master_case
{
public:
    //signal
    //global signal      
   
    explicit master_case();
    ~master_case();

    //common functons   
    void write_mreg32(uint32 addr,uint32 data){}
    void read_mreg32(uint32 addr, uint32& data){}
    void write_mreg64(uint32 addr,uint64 data){}
    void read_mreg64(uint32 addr, uint64& data){}
   
//systemc function
sys_main(){gpio_test();mem_test();voc_test();write_mreg32(0x100,2000);}
sys_init(){gpio_init();mem_init();voc_init();write_mreg32(0x100,2000);}

//gpio test case
    bool gpio_start;
    bool gpio_stop;   
    bool gpio_init(){write_mreg32(0x100,2000);}
    void gpio_test(){write_mreg32(0x100,2000);}
   
//memory test case
    bool mem_start;
    bool mem_stop;   
    bool mem_init(){write_mreg32(0x100,2000);}
    void mem_test(){write_mreg32(0x100,2000);}
   
//voc test case
    bool voc_start;
    bool voc_stop;   
    bool voc_init(){write_mreg32(0x100,2000);}
    void voc_test(){write_mreg32(0x100,2000);}

private:
   
};

但是我们想把模块的测试case 如果gpio,mem,voc,提取出来为
class test_case{

bool start;
bool stop;
void init();
void test();
};
然后根据需要在进行继承
class gpio_test:public test_case
{

};

class mem_test:public test_case
{

};

class voc_test:public test_case
{

};
那么我的主测试类就只需要为
class master_case_simple
{

    explicit master_case_simple();
    ~master_case_simple();

    //common functons   
    void write_mreg32(uint32 addr,uint32 data){}
    void read_mreg32(uint32 addr, uint32& data){}
    void write_mreg64(uint32 addr,uint64 data){}
    void read_mreg64(uint32 addr, uint64& data){}

//systemc function
sys_main(){gpio_test();mem_test();voc_test();write_mreg32(0x100,2000);}
sys_init(){gpio_init();mem_init();voc_init();write_mreg32(0x100,2000);}

gpio_test * gpioTest;
mem_test * memTest;
voc_test * vocTest;

};

关键是我的test_case这个类中的init() and test(), 需要调用master_case_simple中的write_mreg32,read_mreg32等函数
而且sys_main(),sys_init()也需要调用的write_mreg32,read_mreg32等函数。所以不知道该怎么组织。

请大家帮俺们想想,该如何组织这个类
谢谢啦

最佳答案

查看完整内容

class CCommonFunctions{public: static void write_mreg32(uint32 addr,uint32 data){}; static void read_mreg32(uint32 addr, uint32& data){}; static void write_mreg64(uint32 addr,uint64 data){}; static void read_mreg64(uint32 addr, uint64& data){};};class CTestCase{public: virtual bool init(); virtual void test();protected: bool m_Start; bool m_Stop;};class CgpioTestCase :public CTestCase{ //¿& ...

论坛徽章:
0
2 [报告]
发表于 2009-08-26 13:41 |只看该作者
class CCommonFunctions
{
public:
        static void write_mreg32(uint32 addr,uint32 data){};
        static void read_mreg32(uint32 addr, uint32& data){};
        static void write_mreg64(uint32 addr,uint64 data){};
        static void read_mreg64(uint32 addr, uint64& data){};
};

class CTestCase
{
public:
        virtual bool init();
        virtual void test();
protected:
        bool m_Start;
        bool m_Stop;
};

class CgpioTestCase :public CTestCase
{
        //¿ÉÒÔÖØÐÂʵÏÖ¶¨ÒåһЩÆäËû³ÉÔ±¼°·½·¨
        //Èç¹ûinit,testÕâÁ½¸ö·½·¨ÊµÏÖ²»Í¬µÄ»°£¬¿ÉÒÔÔÚÕâÀïÌṩеÄʵÏÖ
       
};

class CmemTestCase :public CTestCase
{
        //¿ÉÒÔÖØÐÂʵÏÖ¶¨ÒåһЩÆäËû³ÉÔ±¼°·½·¨
        //Èç¹ûinit,testÕâÁ½¸ö·½·¨ÊµÏÖ²»Í¬µÄ»°£¬¿ÉÒÔÔÚÕâÀïÌṩеÄʵÏÖ
};

class CvocTestCase :public CTestCase
{
        //¿ÉÒÔÖØÐÂʵÏÖ¶¨ÒåһЩÆäËû³ÉÔ±¼°·½·¨
        //Èç¹ûinit,testÕâÁ½¸ö·½·¨ÊµÏÖ²»Í¬µÄ»°£¬¿ÉÒÔÔÚÕâÀïÌṩеÄʵÏÖ
};

class MasterCase
{
public:
        void sys_Main(){CCommonFunctions::read_mreg32(addr, &data)};
        void sys_init(){CCommonFunctions::write_mreg32(addr, &data)};
};

论坛徽章:
0
3 [报告]
发表于 2009-08-26 16:41 |只看该作者

回复 #2 foolishx 的帖子

static void write_mreg32(uint32 addr,uint32 data){};
        static void read_mreg32(uint32 addr, uint32& data){};
        static void write_mreg64(uint32 addr,uint64 data){};
        static void read_mreg64(uint32 addr, uint64& data){};

这四个函数最为郁闷,他们是通过一个总线接口出去的,所以所有的的类里面只能存在一个copy, 因为调用了一些库函数,该函数不能定义为成static类型,否则link会出错

class CCommonFunctions
{
public:
        void write_mreg32(uint32 addr,uint32 data){};
        void read_mreg32(uint32 addr, uint32& data){};
        void write_mreg64(uint32 addr,uint64 data){};
        void read_mreg64(uint32 addr, uint64& data){};
};



class CTestCase
{
public:
        virtual bool init();
        virtual void test();
        
        void write_mreg32(uint32 addr,uint32 data){p_com_opt->xxxxx};
        void read_mreg32(uint32 addr, uint32& data){p_com_opt->xxxxx};
        void write_mreg64(uint32 addr,uint64 data){p_com_opt->xxxxx};
        void read_mreg64(uint32 addr, uint64& data){p_com_opt->xxxxx};

protected:
        bool m_Start;
        bool m_Stop;
       static CCommonFunctions *p_com_opt;
};

class CgpioTestCase :public CTestCase
{
        
};

class CmemTestCase :public CTestCase
{

};

class CvocTestCase :public CTestCase
{

};

class MasterCase
{
public:
        void sys_Main(){CCommonFunctions::read_mreg32(addr, &data)};
        void sys_init(){CCommonFunctions::write_mreg32(addr, &data)};

        void write_mreg32(uint32 addr,uint32 data){p_com_opt->xxxxx};
        void read_mreg32(uint32 addr, uint32& data){p_com_opt->xxxxx};
        void write_mreg64(uint32 addr,uint64 data){p_com_opt->xxxxx};
        void read_mreg64(uint32 addr, uint64& data){p_com_opt->xxxxx};

        static CCommonFunctions *p_com_opt;
};


不知道这个样子可不可以。
但是那几个公共函数还是被重新封装了一次

论坛徽章:
0
4 [报告]
发表于 2009-08-28 17:24 |只看该作者
已解决
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP