|
相关连接:天梯 之 从零开始玩PIC 系列文章
--------------------------------------------------------------------
天梯 之 从零开始玩PIC——12.关于模块化编程的讨论
--------------------------------------------------------------------
niu9911 发表于 2008-2-14 12:22 PIC 单片机 ←返回版面  |
148楼: 将单文件系统改为多文件系统 |
请教一下,将单文件系统改为多文件系统时,如果有表格(比如说LCD的显示内容表在多个C中都用到了)是应该怎么处理才能通过编译?
| |
程序匠人 发表于 2008-2-14 12:55 PIC 单片机 ←返回版面  |
151楼: niu9911 的问题匠人也感兴趣 |
| 匠人不喜欢在多个模块(文件)中处理显示。那好像有违模块化编程的精神。所以没有遇到过你的困扰。不过,匠人对这个问题也感兴趣。 | |
niu9911 发表于 2008-2-14 17:54 PIC 单片机 ←返回版面  |
152楼: 请教匠人 |
我有五个模块:AD,EE,LCD,KEY和MAIN,其中KEY是个LCD的显示菜单屏,要用到表格,MAIN中在循环中也要显示正常数据用到表格,LCD中就不要说了,匠人说有违模块化编程的精神,那我应该怎么做这几个模块。 用的是C30,在现在的程序中我把LCD的表格和函数定义及函数都放到LCD.H中,在MAIN和KEY中都#INCLUDE LCD.H,程序还是能编译的。但把函数定义放在LCD.H中,把函数放在LCD.C中,表格不知道怎么放了。请教别人说把表格放MAIN中,可试试还是不成。
| |
程序匠人 发表于 2008-2-14 19:05 PIC 单片机 ←返回版面  |
153楼: 回niu9911 |
匠人一般不会在显示模块之外做查表送显的动作。 按键模块只执行按键的监测和功能解析;main()中就更不会去做任何实际功能了。 模块化编程,就是各司其职。相互通过变量传递信息就好了。
//-------------------------------------------------------- //主函数 //-------------------------------------------------------- void main(void) { init(); //====初始化
//====循环主体 while (1) { asm ("clrwdt"); //喂狗 //asm ("nop"); // if ( T_10MS_FLAG ) time_cnt() ; //如果10毫秒定时溢出标志=1,则调用计时处理程序 if ( NEW_DISP_EN_FLAG ) new_display() ; //如果显示刷新使能标志=1,则刷新显示缓冲区 if ( ADGO == 0 ) adc_cnt() ; //如果ADC结束,则调用ADC处理程序 if ( TEMP_SCAN_EN_FLAG ) temp_cnt() ; //如果温度检测使能标志=1,则调用温度处理程序 comm_cnt(); //串行通讯后台处理 if ( (EEPROM_NEW_FLAGS!=0) && (WR==0) && (NO_KEY_JSQ>5) ) new_eeprom() ; //如果EEPROM数据更新标志<>0,且写操作结束,且无按键计数器>5,则更新eeprom内容
} }
| |
hotpower 发表于 2008-2-14 19:39 PIC 单片机 ←返回版面  |
154楼: 有点不是问题的问题~~ |
if ( T_10MS_FLAG ) time_cnt() ;
应该为: if ( T_10MS_FLAG ) { time_cnt() ; T_10MS_FLAG = 0; }
总不至于: void time_cnt(void) { //.......... T_10MS_FLAG = 0; }
| |
yewuyi 发表于 2008-2-15 08:51 PIC 单片机 ←返回版面  |
155楼: niu9911用extern不就可以了吗? |
|