C语言程序该这样写

[复制链接]
5295|30
小叶子疯 发表于 2012-5-17 08:34 | 显示全部楼层
我自己学c也注意到模块化的问题了.楼主讲得很对
bhsdlmj 发表于 2012-5-17 09:31 | 显示全部楼层
本帖最后由 bhsdlmj 于 2012-5-17 09:36 编辑

、、、、、、、、、、、、、、、、、、、、、、、


  1. #define  TMR0_IRQ_INTERVAL_VALUE  1     //单位:毫秒
  2. #if TMR0_IRQ_INTERVAL_VALUE > 2
  3. #error "handsome boy, attention: TMR0_IRQ_INTERVAL_VALUE's maximum value is 296/100 ms"
  4. #endif
  5. #define  TH0_RELOAD_VALUE      (65536 - ((INT32U)SYSCLK * TMR0_IRQ_INTERVAL_VALUE) / 1000) / 256         
  6. #define  TL0_RELOAD_VALUE      (65536 - ((INT32U)SYSCLK * TMR0_IRQ_INTERVAL_VALUE) / 1000) % 256





  7. /**------------------------------------------------------------
  8.   * @brief  This function handles TIM0 interrupt request.
  9.   * @param  TF0 is cleared by hardware
  10.   * @retval : None
  11.   --------------------------------------------------------*/
  12. void TIM0_IRQHandler(void) interrupt PI_Order_TIM0
  13. {
  14. __IO INT8U SFRPAGE_SAVE = SFRPAGE;
  15. SFRPAGE = TIMER01_PAGE;
  16. TH0 = TH0_RELOAD_VALUE;
  17. TL0 = TL0_RELOAD_VALUE;
  18. CBTime_g++;
  19.         
  20. SFRPAGE = SFRPAGE_SAVE;                     
  21. }
  22. /**-----------------------------------------------
  23.   * @brief  TimeIntervalOut
  24.   * @param                       
  25.   * @note :
  26.   * @retval :
  27.   -------------------------------------------------*/
  28. BOOLEAN CBTimeDly(INT8U tc, INT16U milli)
  29. {
  30. static __IO INT16U ticks[TC_TOTAL + 1] = {0};
  31. static BOOLEAN  time1st_OK = TRUE;   
  32. BOOLEAN timeOut_OK = FALSE;

  33. INT8U loops = 0;
  34. if (tc <= TC_TOTAL) {
  35.   CB_UsedTC_标志寄存器_g = (INT16U)((INT16U)CB_UsedTC_标志寄存器_g | (INT16U)((INT16U)(1 << tc)));  
  36.                               

  37.   if (time1st_OK) {
  38.    time1st_OK = FALSE;
  39.    for (loops = 0; loops <= TC_TOTAL; loops++) {
  40.     ticks[loops] = CBTime_Get();
  41.    }
  42.   }
  43.   else {
  44.    if ((CBTime_Get() - ticks[tc]) >= milli) {
  45.     ticks[tc] = CBTime_Get();
  46.   
  47.     timeOut_OK = TRUE;
  48.    }
  49.    else {
  50.     timeOut_OK = FALSE;
  51.    };
  52.   }
  53. }
  54. else {
  55.   timeOut_OK = FALSE;
  56. }
  57. return timeOut_OK;
  58. }

  59. /**-----------------------------------------------
  60.   * @brief  CBTime_Get
  61.   * @param  None
  62.   * @note :
  63.   * @retval : None
  64.   -------------------------------------------------*/
  65. #pragma SAVE
  66. #pragma OT(0)
  67. INT16U CBTime_Get(void)
  68. {
  69. static __IO INT16U tmp = 0;
  70. tmp = CBTime_g;
  71. while (tmp != CBTime_g) {
  72.   tmp = CBTime_g;
  73. }
  74. return tmp;
  75. }
  76. #pragma RESTORE



、、、、、、、、、、、、、、、、、、、、、、、、、、

@@@@@@@@@@@@@@@@@@@@@@@
应用 让50个灯以不同的周期闪

//第0通道,10ms
if (CBTimeDly, 0,10) {
     //灯1闪
}
//第1通道,17ms
if (CBTimeDly, 1,17) {
     //灯2闪
}
//第2通道,8ms
if (CBTimeDly, 2,8) {
     //灯3闪
}

,,,,,,
pyramid3ck 发表于 2012-5-17 10:13 | 显示全部楼层
这个难度太大了吧,得到啥水平才能写出来
Tz-吕生丨丨 发表于 2012-5-17 10:20 | 显示全部楼层
来学习
280571634 发表于 2012-5-17 12:11 | 显示全部楼层
以后也要好好往这个方向靠拢,想想我的代码都只是为了完成任务,但是人性化方面考虑很少
zc564075839 发表于 2012-5-17 15:30 | 显示全部楼层
cuiwei328257881 发表于 2012-5-17 17:48 | 显示全部楼层
细节决定成败
ryming 发表于 2012-5-17 20:55 | 显示全部楼层
看了一下还忙适合自己
dallas1131 发表于 2012-5-18 16:56 | 显示全部楼层
代码模块化、规范化都非常好。
只是在实际应用中,在中断中回调处理函数,对其它需要实时响应的任务有很大的影响。
换种说法,这类代码对多任务的优先级考虑不够。
Jordon138 发表于 2012-5-20 14:43 | 显示全部楼层
路过,看了一下,还好~
望断云山 发表于 2012-5-27 20:35 | 显示全部楼层
还是喜欢用汇编直接抄底
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部