打印
[LOOK]

学习体会第六贴——实现在任务中调用其他类成员函数

[复制链接]
1595|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gdmgb520|  楼主 | 2011-9-26 23:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看了CPP类的定义,成员函数的调用,参考了LOOK例程,尤其是LOOK_RTC,终于实现在任务中底啊用另外一个对象的成员函数来控制LED闪烁。到此,对LOOK和CPP有了一点点的了解了。

实现的功能是在task_led1任务中调用led3对象的led_off()函数实现LED1灯的闪烁。是在LOOK_LED的基础上改写的。
贴代码:
led.cpp
#include "led.h"

#define LOOK_H 1

#if LOOK_H == 0
#include "NUC1xx.h"
#include "NUC1xxM051Seriescfg.h"
#else
#define __HAVE_GPIO
#include <nuc120re3an.h>
using namespace nuvoton;
#endif

// 任务类 task_led3_t 的定义
class task_led3_t : public task_t {
public:
        __INLINE__ task_led3_t();        // 构造函数
       
public:
        void led_off(void);
};

// 任务类 task_led3_t 的构造函数
__INLINE__ task_led3_t::task_led3_t()
{
        // TODO: 在此初始化 task_led3_t 的类成员
}

void task_led3_t::led_off(void)
{
        static uint32_t data = 0b100;
        GPIOA.DMASK(-1)
                 .DMASK2(0);
    GPIOA.DOUT = data;
        data ^= 0b100;
}

task_led3_t led3;         //创建对象

// 任务类 task_led_t 的例程
void task_led1_t::routine()
{
        // TODO: 在此编写 task_led_t 例程的内容
        uint32_t data = ~0b1000;
        while (true) {
                // TODO: 在此编写 task_led_t 例程的内容
                data &= 0b111000;
                data <<= 1;
                data += data >> 3;
#if LOOK_H == 0
                GPIOAs.DMASK.Regs = ~0b111000;
                GPIOAs.DOUT.Regs = data;
#else
                GPIOA.DMASK(-1)
                     .DMASK5(0)
                         .DMASK4(0)
                         .DMASK3(0);
            GPIOA.DOUT = data;
#endif
                delay(LOOK_TICKS_PER_SEC / 2);
                led3.led_off();
        }
}
// 任务类 task_led_t 的例程
void task_led2_t::routine()
{
        // TODO: 在此编写 task_led_t 例程的内容
        uint32_t data = 0b100;
        while (true) {
                // TODO: 在此编写 task_led_t 例程的内容
#if LOOK_H == 0
                GPIOAs.DMASK.Regs = ~0b100;
                GPIOAs.DOUT.Regs = data;
#else
                GPIOA.DMASK(-1)
                         .DMASK2(0);
            GPIOA.DOUT = data;
#endif
                data ^= 0b100;
                delay(LOOK_TICKS_PER_SEC / 10);
        }
}



#ifdef LOOK_SCHEDULING_PRIORITY
instantiate::task<task_led1_t, LOOK_STACK_SIZE> task_led1(0);
instantiate::task<task_led2_t, LOOK_STACK_SIZE> task_led2(0);
#else
instantiate::task<task_led1_t, LOOK_STACK_SIZE> task_led1;
//instantiate::task<task_led2_t, LOOK_STACK_SIZE> task_led2;
//instantiate::task<task_led3_t, LOOK_STACK_SIZE> task_led3;
#endif


led.h
#include "look_config.h"
#include <look.h>
//#include <instantiate>

// 任务类 task_led1_t 的定义
class task_led1_t : public task_t {
public:
        __INLINE__ task_led1_t();        // 构造函数
       
protected:
        void routine();                // 任务例程
};

// 任务类 task_led1_t 的构造函数
__INLINE__ task_led1_t::task_led1_t()
{
        // TODO: 在此初始化 task_led1_t 的类成员
}

//extern instantiate::task<task_led1_t, LOOK_STACK_SIZE> task_led1;

// 任务类 task_led2_t 的定义
class task_led2_t : public task_t {
public:
        __INLINE__ task_led2_t();        // 构造函数
       
protected:
        void routine();                // 任务例程
};

// 任务类 task_led2_t 的构造函数
__INLINE__ task_led2_t::task_led2_t()
{
        // TODO: 在此初始化 task_led2_t 的类成员
}


extern instantiate::task<task_led1_t, LOOK_STACK_SIZE> task_led1;
extern instantiate::task<task_led2_t, LOOK_STACK_SIZE> task_led2;



睡觉,有问题 的朋友尽管留言,大家一起琢磨。

这几天我都是一头雾水。

相关帖子

沙发
nixianmin| | 2011-9-26 23:10 | 只看该作者
哈哈,我也搞LOOK和C++一头雾水,大家一起写,一起交流

使用特权

评论回复
板凳
lixiaoxu2meng| | 2011-9-27 07:31 | 只看该作者
顶 收藏了 以后学习 呵呵

使用特权

评论回复
地板
gdmgb520|  楼主 | 2011-9-27 08:19 | 只看该作者
昨天太晚了,没有详细写,只是贴了代码。

昨天实现的程序对我意义重大,这是迈出了很有意义的一步,譬如我可以创建一个TFT类,建立一些控制TFT的成员函数,然后创建一个任务和一个TFT对象,在任务中调用TFT类对象的成员函数实现TFT的显示、刷新等等。

建议像我一样还没有入门的盆友先看CPP类的定义,再看几个菜农大叔的初级LOOK例程,LED控制的就可以了。然后看大叔的LOOK_RTC例程。基本就可以看出点门道了。

使用特权

评论回复
5
john_lee| | 2011-9-27 22:39 | 只看该作者
一头雾水就发帖提问,或在qq群提问,给我留言也可以。

使用特权

评论回复
6
gdmgb520|  楼主 | 2011-9-27 23:10 | 只看该作者
5# john_lee

谢谢老师。
今天晚上实现了在lOOK里使用TFT,呵呵,把菜农大叔的lcd_demo搬到LOOK了。现在去发帖。呵呵

使用特权

评论回复
7
gdmgb520|  楼主 | 2011-9-28 13:23 | 只看该作者
在这贴学习的基础上实现了LOOK上TFT,详情请见

https://bbs.21ic.com/icview-272187-1-1.html

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:了解新东西才知道自己的不足。 www.elecbench.com

67

主题

452

帖子

1

粉丝