找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2474|回复: 0
打印 上一主题 下一主题
收起左侧

福利又来了:强哥教你指针的妙用

[复制链接]
跳转到指定楼层
楼主
ID:262 发表于 2014-10-21 01:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       与上次不同的是,代码暂不在日志里分析,只是告诉大家,对于一个多任务系统(注:非操作系统中的多任务),它们之间又有着很多共同之处,例如它们都有任务号、都有命令字、都要执行某个或某些函数等,那么现在如何使用最简洁的代码完成任务呢?答案当然是使用指针函数了。下面贴出代码:

unsigned char TASK_ID;                                //任务ID号
unsigned char CMD;                                        //命令字

void (*Cur_Fun)();                                                //指针函数声明

typedef struct                                                //功能函数结构体
{
        unsigned char TASK_ID;                        //任务ID
        unsigned char PIC_ID;                                //显示界面的ID号
        void (*EXE)();                                                //需要执行的函数
}FUNCTION;

void FUN0(void)                           
{
        CMD = 1;                                                //返回命令字1
}

void FUN1(void)
{
        CMD = 2;                                                //返回命令字2
}

FUNCTION code FUN_LIST[2]=
{
        {0,4,(*FUN0)},                                                //任务ID为0,页面ID为4,执行函数FUN0()
        {1,6,(*FUN1)}                                                //任务ID为1,页面ID为6,执行函数FUN0()
};

void main()
{
        TASK_ID = 1;
        Cur_Fun = FUN_LIST[TASK_ID].EXE;   //指针指向相应的函数
        (*Cur_Fun)();                                         //执行指针指向的函数
        while(1);
}
        把上面的代码复制到KEIL中编译即可,通过软件仿真可以发现,最后的命令字CMD是2,因为TASK_ID为1,那么对应执行的函数为FUN1() 。在主函数里,我直接给TASK_ID赋值1,看起来只执行一个任务,大家可以用开关语句获取多任务的任务ID,然后用指针指向对应需要执行的函数,然后执行那个函数即可,是不是很妙?当然,这也是基础。需要说明的是,大家要注意局部变量和全局变量,结构体中也定义了一个局部变量TASK_ID,此TASK_ID与彼TASK_ID是不一样的,这样写也是提醒大家一定注意局部变量和全局变量,不然有时候出了问题你都不知道到哪里找BUG,变量的命名一定要规范。
        大家从代码中可以看到有一个空指针函数,那么空指针有什么作用呢?想好了请给我答案!
        如有问题,可以留言提问,发表这篇日志就该回去休息了,晚安!


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表