9回答

0收藏

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

#开源分享 #开源分享 2684 人阅读 | 9 人回复 | 2014-05-28

付费主题

已有0人支付

分享到:
回复

使用道具 举报

回答|共 9 个

倒序浏览

来自 4#

laoliang-67665

发表于 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即可。

嵌入式,ucos,FPGA系统书籍作者
沙发

laoliang-67665

发表于 2014-5-28 19:20:29 | 只看该作者

请问你的硬件是什么开发板?这个代码是在亮点STM32开发板下跑的,如果是其他开发板资源不同的。
嵌入式,ucos,FPGA系统书籍作者
板凳

乔麦

发表于 2014-5-28 19:54:42 | 只看该作者

就是买的您的开发板
5#

乔麦

发表于 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后
屏有背光,但没显示,并且通过串口发数据没返回
6#

乔麦

发表于 2014-5-29 15:43:46 | 只看该作者

知道了,我看了一下代码,原来里面没有做液晶显示
7#

laoliang-67665

发表于 2014-5-29 18:17:04 | 只看该作者

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

有些代码是用串口输出数据的
嵌入式,ucos,FPGA系统书籍作者
8#

乔麦

发表于 2014-6-2 22:25:45 | 只看该作者

谢谢回复,我怎么把铜 板给你
9#

小菜儿

发表于 2014-6-3 10:38:06 | 只看该作者

qiaomai 发表于 2014-6-2 22:25
谢谢回复,我怎么把铜 板给你

楼主,你这贴不是悬赏帖,可以通过评分给回答问题者加铜板
10#

乔麦

发表于 2014-6-3 12:29:36 | 只看该作者

明白了,呵呵
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

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