查看: 2446|回复: 9

亮哥开发板带的源代码为什么不能运行?

[复制链接]
  • TA的每日心情
    开心
    2014-6-3 12:28
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-5-28 14:38:07 | 显示全部楼层 |阅读模式
    分享到:
    购买主题 本主题需向作者支付 2 与非币 才能浏览
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-8 15:51
  • 签到天数: 22 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2014-5-28 20:48:18 | 显示全部楼层
    清楚了,故事是这样的....
    现在已从用户Q群得知你的自检程序是正常的,因此硬件是正常的。
    这个例子是为学习UCOS的任务挂起OSTASKSuspend和恢复的OSTaskResume
    说明在MAIN.c中,如下:
    /*实验 基于信号量的多任务循环缓冲数据采集处理实验

      需求说明:
            1.远程采集终端12位AD采集7路模拟量,每500毫秒左右将数据通过串口下面的格式送本机
                    0xFA 0xFB D7H D7L D6H D6L D5H D5L D4H D4L D3H D3L D2H D2L D1H D1L 0xFE 0xFE
                    例如:FA FB 00 01 00 02 00 03 00 04 00 05 00 06 00 07 FE FE
                    D7H表示路7的高8位,D7L表示路7的低8位,D7H的高4位全为0。   
                    2.远程采集终端具有过流保护功能,在发生过流的时候,通过串口发送以下数据格式到本机
                    0xFA 0xF4 TYPE 0xFE 0xFE
                    保护解除后再发一组数据
                    其中,TYPE的位0、位1、位2表示三个电源过流.高有效。
                    3.数据接收后,将电压值显示在屏幕上。发生过流,
                    点亮对应LED

      分析:因为数据长度不能确定,所以不采能用实验24的方法
                      考虑采用循环缓冲区来                         
                    建立一个100个字节的缓冲,用P1指示下一个接收的位置,P2指示当前需要提取数据的位置
                    如  01 02 03 04 空 空 空
                            P2                  P1
                            如果P1==P2则数据都已经处理
                   
      解决方案:采用UCOS多任务机制和循环缓冲,建立以下任务:

                    串口中断函数向缓冲区填充接收到的数据
                    数据处理任务分析缓冲区,根据缓冲区中的数据判断接收到的数据的类型,处理完毕,让显示任务来更新显示
                    显示任务负责更新显示,包括屏幕和LED
                    测试的时候采用串口调试助手,以100毫秒周期发送数据包,严格于项目要求的500毫秒,将取得的数据送回,接收到
                    过流保护信息包时查看LED的亮灭

    */
    主程序构建了以下几个任务:
      int main(void){                                                                                                                       
            INT8U  os_err;
        os_err=os_err;
            pput=USART1_BUF;
            pget=USART1_BUF;
            BUFEXCEED=USART1_BUF+RECEBUFSIZE;
            bpboard_init();//硬件初始化
              //bp_selfcheck(1);
            OSInit(); //³õʼ»¯UCOS

            os_err = OSTaskCreate((void (*)(void *)) App_TaskStart,  // 启动任务
                              (void          * ) 0,                                 
                              (OS_STK        * )&App_TaskStartStk[APP_TASK_START_STK_SIZE - 1],          
                              (INT8U           ) APP_TASK_START_PRIO); //ÓÅÏȼ¶3£¬×î¸ß
            os_err = OSTaskCreate((void (*)(void *)) App_TaskDisp,  /* 显示任务
                              (void          * ) 0,
                              (OS_STK        * )&App_TaskDispStk[APP_TASK_DISP_STK_SIZE - 1],
                              (INT8U           ) APP_TASK_DISP_PRIO);

            os_err = OSTaskCreate((void (*)(void *)) App_TaskProc,  /* 处理任务
                              (void          * ) 0,
                              (OS_STK        * )&App_TaskProcStk[APP_TASK_PROC_STK_SIZE - 1],
                              (INT8U           ) APP_TASK_PROC_PRIO);
            OSStart();  
            return(0);
    }       

    启动任务在设置好时钟滴答后就阻塞了,也可以选择删除自己,因此问题跟其无关
    处理任务和现实任务代码较长,对照代码来看
    处理任务第一次运行时,因为没有接收到数据,缓冲区为空,因此调用
    OSTaskSuspend(OS_PRIO_SELF); 挂起自己
    当然,显示任务也是这样
    因此,没有给串口喂数据,当然没有显示了

    再看串口中断服务程序

    void USART1_IRQHandler(void)        //´®¿Ú1ÖжϷþÎñ³ÌÐò
    {
           
            u8 currentget;
        OSIntEnter();
            currentget=USART1->DR  ;

            *pput++ = currentget;
            if (pput==BUFEXCEED)//Êý×éµØÖ·Ô½½ç
                    pput=USART1_BUF;
            if ((lastget==0xFE)&&(currentget==0xFE))
                    {OSTaskResume(APP_TASK_PROC_PRIO);}        //Èç¹û½ÓÊÕµ½Á¬ÐøµÄFEÔò±íʾ½ÓÊÕµ½Ò»×éÓÐЧµÄÊý¾Ý
            lastget=currentget;
        OSIntExit();

    }         
    现在就清楚了吧,如果接收到完整的一组数据 以0XFE0XFE结尾,我们才需要处理,才OSTaskResume(APP_TASK_PROC_PRIO);

    因此,你说的不显示是正常的,按代码的说明发数据到串口1即可。

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-8 15:51
  • 签到天数: 22 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2014-5-28 19:20:29 | 显示全部楼层
    请问你的硬件是什么开发板?这个代码是在亮点STM32开发板下跑的,如果是其他开发板资源不同的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-6-3 12:28
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2014-5-28 19:54:42 | 显示全部楼层
    就是买的您的开发板
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-6-3 12:28
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2014-5-29 14:46:01 | 显示全部楼层
    我通过串口发数据 FA FB 00 01 00 02 00 03 00 04 00 05 00 06 00 07 FE FE,串口返回 1,2,3,4,5,6,7,屏还是没有显示,并没有背光,
    我把 bp_config.h中的  #define TFT_SUPPORT(4.3寸触摸屏支持 ) 由0改成1后
    屏有背光,但没显示,并且通过串口发数据没返回
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-6-3 12:28
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2014-5-29 15:43:46 | 显示全部楼层
    知道了,我看了一下代码,原来里面没有做液晶显示
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-8 15:51
  • 签到天数: 22 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2014-5-29 18:17:04 | 显示全部楼层
    qiaomai 发表于 2014-5-29 15:43
    知道了,我看了一下代码,原来里面没有做液晶显示

    有些代码是用串口输出数据的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-6-3 12:28
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2014-6-2 22:25:45 | 显示全部楼层
    谢谢回复,我怎么把铜 板给你
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-9-28 10:10
  • 签到天数: 1018 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2014-6-3 10:38:06 | 显示全部楼层
    qiaomai 发表于 2014-6-2 22:25
    谢谢回复,我怎么把铜 板给你

    楼主,你这贴不是悬赏帖,可以通过评分给回答问题者加铜板
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-6-3 12:28
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2014-6-3 12:29:36 | 显示全部楼层
    明白了,呵呵
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-25 15:38 , Processed in 0.225659 second(s), 37 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.