OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10044|回复: 2

喜欢优化代码的,看这一段的技术含量

[复制链接]

6

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2012-6-21
在线时间
12 小时
发表于 2012-6-21 11:40:37 | 显示全部楼层 |阅读模式

那个读懂的,请给加个中文注释。 

H文件
typedef struct {
    u16  id;                     // Application ID
    void (*ini_func)(void*);     // Function - Initialization
    void (*end_func)(void*);     // Function - Finalization
    void (*run_func)(void*);     // Function - Proccess
} AP_TBL_ST;

typedef struct  {
    u16         id;
    AP_TBL_ST*  pCurAP;
    u8          gr_timer_handle;
    u16         reserve_id;
} CONTEXT_ST;

/* Private define ------------------------------------------------------------*/

#define AP_INIT         (0x8000)
#define AP_SET(id)      (AP_INIT|(id))
#define AP_END   (0xFFFF)

/*  Input Context ID   */
#define AP_INPUT_UACTL (0)


/*  State Context ID   */
#define AP_STATE_DETECT (0)
#define AP_STATE_UACTL  (1)
#define AP_STATE_SYSERR (2)


/*  Display Context ID  */
#define AP_DISPLAY_DETECT (0)
#define AP_DISPLAY_UACTL  (1)
#define AP_DISPLAY_MONITOR (2)


c 代码
//  Input Table
static AP_TBL_ST gstInputTbl[] = {
    { AP_INPUT_UACTL,  AP_Input_Ini_UACTL,   AP_Input_End_UACTL,   AP_Input_Run_UACTL  },
    { AP_END,    0,    0,   0       }
};

//  State Table
static AP_TBL_ST gstStateTbl[] = {
    { AP_STATE_DETECT, AP_State_Ini_Detect,     AP_State_End_Detect, AP_State_Run_Detect },
    { AP_STATE_UACTL,  AP_State_Ini_UACTL,      AP_State_End_UACTL,  AP_State_Run_UACTL  },
    { AP_STATE_SYSERR, AP_State_Ini_sys_error,  0,                   0                   },
    { AP_END,    0,             0,             0            }
};

//  Display Table
static AP_TBL_ST gstDisplayTbl[] = {
    { AP_DISPLAY_DETECT,    AP_Display_Ini_Detect,  AP_Display_End_Detect,  AP_Display_Run_Detect },
    { AP_DISPLAY_UACTL,     AP_Display_Ini_UACTL,   AP_Display_End_UACTL,   AP_Display_Run_UACTL  },
    { AP_DISPLAY_MONITOR,   AP_Display_Ini_Monitor, AP_Display_End_Monitor, AP_Display_Run_Monitor  },
    { AP_END,    0,             0,             0            }
};

static MAIN_OBJ_ST  gu_obMain;


int main(void)
{
    INPUT_OBJ_ST*   pInput;
    STATE_OBJ_ST*   pState;
    DISPLAY_OBJ_ST* pDisplay;
省略初始化部分

    appInitialize( &gu_obMain );

    pInput = &gu_obMain.obInput;
    pState = &gu_obMain.obState;
    pDisplay = &gu_obMain.obDisplay;

    while (1) 
    {
        processContext( &pInput->ctx, gstInputTbl, (void*)&gu_obMain );

        // State Control process
        processContext( &pState->ctx, gstStateTbl, (void*)&gu_obMain );

        // Display Control process
        processContext( &pDisplay->ctx, gstDisplayTbl, (void*)&gu_obMain );

    }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-6-21 11:52:34 | 显示全部楼层
你这是一堆的函数指针在跳.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2012-6-21
在线时间
12 小时
 楼主| 发表于 2012-6-21 12:16:53 | 显示全部楼层
其实我更喜欢原子的代码,直观易懂。正想修改这个优化得理不清的main()
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 07:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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