微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 程序基本构架应用

程序基本构架应用

时间:10-02 整理:3721RD 点击:
长期做单片机开发的工程师,每个人写程序都有自己的一套常用的主程序固有构架模式,在这里简单的介绍最常见和实用的结构框架:
首先说,现在学校的学习内容和教学内容都是习惯于在主程序中直接以主程序内程序不断循环运行的模式,即
void main()
{   
/*程序内容*/
}
这种方式无法控制主程序内程序的运行时间长度。
而在实际开发中这是习惯于以时间标记方式来控制主程序的运行时间点,即
/******************************程序编写者:周朝辉***************************//  
#define      uchar      unsigned char                                                                  //无符号char类型
#define      uint         unsigned int                                                                     //无符号int类型
#define      set_bit(x,y)              (x|=(1<<y))                                                   //位置1
#define      clr_bit(x,y)              (x&=~(1<<y))                                                //位清0
#define      get_bit(x,y)            (x&(1<<y))                                                      //位查询
#define      xor_bit(x,y)             (x^=(1<<y))                                                  //位取反
void timer(void)    interrupt 1                                   /*定时器中断入口函数*/
{
    /****个人不建议在中断内放入过段程序段内容,影响程序稳定性和中断时基准确性******/
    r_timer_10ms++;                                               //定时器中断进入次数累加器
    if(r_timer_10ms>=80)                                        //125us*80=10ms
    {
        r_timer_10ms=0;        
        set_bit(r_flag2,b_timer_10ms);                      //置位10ms时间基准标记
    }
    /********************************************************************/
}
void timer_count(void)                                          //时间标记计数函数
{        
        r_timer_100ms++;
        r_timer_1s++;
        if(r_timer_100ms>=10)                                 
        {
            r_timer_100ms=0;
            set_bit(r_flag2,b_timer_100ms);                //置位100ms时间基准标记              
        }            
        if(r_timer_1s>=100)
        {
            r_timer_1s=0;
            set_bit(r_flag2,b_timer_1s);                      //置位1s时间基准标记
        }
}
void main()
{
    sys_init();                                                           //系统配置初始化   初始化程序在while外,只在上电启动时运行一次
    while(1)
    {
     if(get_bit(r_flag2,b_timer_10ms))                      //10ms的时基标记,即每10ms运行一次主程序内容。这样可以很方便的控制主程序的运行时间
          {                                                                  //需要注意的是,程序内容有可能运行时间超出10ms时间,所有需要实际测试以保证是否时间溢出
               clr_bit(r_flag2,b_timer_10ms);                //清除时间标记,等待下一次时间标记
               timer_count();                                        //利用10ms时基来计数100ms,1s时间,置位标记,而避免置入定时器中断内,加重定时器程序量
                /*程序内容1*/                                       //内容根据各种需要处理程序段的及时性和响应速度而定
          }
     if(get_bit(r_flag2,b_timer_100ms))                   //100ms的时基标记,即每100ms运行一次主程序内容。这样可以很方便的控制主程序的运行时间
          {                                                                 //需要注意的是,程序内容有可能运行时间超出100ms时间,所有需要实际测试以保证是否时间溢出
               clr_bit(r_flag2,b_timer_100ms);             //清除时间标记,等待下一次时间标记
               /*程序内容2*/                                       //内容根据各种需要处理程序段的及时性和响应速度而定
          }
     if(get_bit(r_flag2,b_timer_1s))                          //1s的时基标记,即每1s运行一次主程序内容。这样可以很方便的控制主程序的运行时间
          {                                                                 //需要注意的是,程序内容有可能运行时间超出1s时间,所有需要实际测试以保证是否时间溢出
               clr_bit(r_flag2,b_timer_1s);                    //清除时间标记,等待下一次时间标记
               /*程序内容2*/                                       //内容根据各种需要处理程序段的及时性和响应速度而定
          }
    }
}
禁忌:1:良好的程序习惯非常之关键,程序的整齐性和标注的清晰性一定要养成和保持
           2:中断内尽量少放程序内容,能尽量放在主程序内处理的别放在中断内,既影像程序稳定性,同时每次在中断内添加程序的同时中断的时基也会收到影响
备注:程序框架是程序稳定性的灵魂关键,好的程序框架能非常有效的提高开发效率和开发稳定性。该段介绍有助于初学者从学习阶段步入实际应用阶段的学习启蒙。后续还有很多其它的个人非常经典的程序内容与各位分享 ,相互交流学习可加个人qq 1044340359

小编好贴,最需要这种讲方法的帖子了

后续还会更新补充的,有需要可以加我qq交流

呵呵 讲解 得这么详细啊,不久之后 就会有大批的粉丝 ,,,先占前排

辉哥不才,还忘各位能多提意见

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top