zoukankan      html  css  js  c++  java
  • 第二次作业

    一、例程编译、测试
    1.在github上,Fork例程项目(https://github.com/cbhust/STM32F429_Discovery_FreeRTOS_9.git) 到自己的个人账号。

    2.clone项目到本地电脑的Ubuntu虚拟机中。

    # sudo apt-get update
    
    # sudo apt-get upgrade # sudo apt-get install build-essential git
    
    # sudo apt-get install gcc-arm-none-eabi gdb-arm-none-eabi
    
    # mkdir work # cd work # git clone https://github.com/cbhust/STM32F429_Discovery_FreeRTOS_9.git
    

    3.QEMU安装

    到网页 https://github.com/gnu-mcu-eclipse/qemu/releases/tag/gae-2.8.0-20161227 下载二进制文件 gnuarmeclipse-qemu-debian64-2.8.0-201612271623-dev.tgz到~/work目录

    在工作目录解压缩文件,并把路径添加到$PATH变量中

    #cd ~/work
    #tar xvf gnuarmeclipse-qemu-debian64-2.8.0-201612271623-dev.tgz
    #chmod -R -w ./qemu
    export PATH=~/work/qemu/2.8.0-201612271623-dev/bin/:$PATH
    

    测试qemu能否正常运行

    #qemu-system-gnuarmeclipse --version
    

    版本为2.8.0 符合要求

    4.编译例程
    在/Projects/Demo1目录下运行make,生成hello_rtos.elf文件

    5.QEMU仿真
    在Demo1目录下运行脚本文件:

    #./qemu.sh
    

    则qemu开始执行hello_rtos.elf文件,在弹出的GUI中看到程序执行的效果.

    6.GDB调试
    在/Projects/Demo1目录下运行qemu_gdb脚本文件,该文件中添加了--gdb tcp::1234 -S

    qemu启动后等待来自gdb的调试指令,打开另外一个终端窗口,运行

    #arm-none-eabi-gdb
    

    在gdb界面内运行:

    (gdb)target remote localhost:1234
    (gdb)continue
    

    可以看到qemu开始执行程序,GUI界面上可以看到程序执行效果.

    二、编程作业
    1、基本要求
    创建三个任务:Sender_Task,Receiver_Task, Monitor_Task
    Sender_Task的任务执行周期为2ms,Receiver_Task的任务执行周期为1000ms, Monitor_Task的任务执行周期为10000ms。
    Sender_Task在每个执行周期向Receiver_Task发送一个32位无符号整数,第一次发送1,然后依次发送2,3,4......,发送完10000后再从1开始发送。同时对发送的数据进行计算累加计算并保存当前累加结果。

    2.main函数

    int main(void)
    {
         MsgQueue=xQueueCreate(30000,sizeof(uint32_t));
       xTaskCreate(
                    Sender_Task,
                    "Sender_Task",
                    configMINIMAL_STACK_SIZE,
                    (void*) NULL,
                    tskIDLE_PRIORITY+4UL,
                    NULL
                   );
         xTaskCreate(
                    Receiver_Task,
                    "Receiver_Task",
                    configMINIMAL_STACK_SIZE,
                    (void*) NULL,
                    tskIDLE_PRIORITY+3UL,
                    NULL
                   );
         xTaskCreate(
                    Monitor_Task,
                    "Monitor_Task",
                    configMINIMAL_STACK_SIZE,
                    (void*) NULL,
                    tskIDLE_PRIORITY+2UL,
                    NULL
                   );
    vTaskStartScheduler();
    for( ;; );
    

    3.Sender_Task

       void Sender_Task(void *pvParameters)
        {
                 uint32_t Sendnum=1;
    
                 while(1)
                 {
                         xQueueSend(MsgQueue,(void* )&Sendnum,0);
                         Sendsum=Sendsum+Sendnum;
                         Sendnum++;
                         if(Sendnum==10000)
                         {
                            uint32_t Sendnum=1;
                         }
                         vTaskDelay(2);
                 }       
        }
    

    4.Receiver_Task

     void Receiver_Task(void *pvParameters)
        {
                 uint32_t Receivernum=0;
    
                 while(1)
                 {
                         while(xQueueReceive(MsgQueue,&Receivernum,
                         0/portTICK_RATE_MS) == pdTRUE)
                         {
                          Receiversum=Receiversum+Receivernum;
                         }
                         vTaskDelay(1000);
                 }       
        }
    

    5.Monitor_Task

       void  Monitor_Task(void)
        {
               while(1)
               {
                 if(Receiversum == Sendsum)
                 {
                  Green_LED_On();
                  vTaskDelay(1000/ portTICK_RATE_MS);
                  Green_LED_Off();
                 }
                 else
                 {
                  Red_LED_On();
                  vTaskDelay(1000/ portTICK_RATE_MS);
                  Red_LED_Off();
                 }
                 vTaskDelay(10000);
               }
        }
    
  • 相关阅读:
    专访周金可:我们更倾向于Greenplum来解决数据倾斜的问题
    APK瘦身记,如何实现高达53%的压缩效果
    2017 先知创新大会:有 ZHI 而来
    【云栖实录】面对正在崛起的移动支付,如何做好数据运营
    【云栖直播】精彩推荐第2期:首届阿里巴巴研发效能嘉年华
    少个人保护?我来!——阿里云在ICANN第3届GDD峰会纪实
    使用99元一年的256MB高性能阿里云Redis加速Discuz论坛
    云数据库HBase助力物联网,免费申请中
    云数据库Redis版256M双机热备款
    干货满满的大数据技术沙龙来了, 24 日北京不见不散
  • 原文地址:https://www.cnblogs.com/element-white/p/7615215.html
Copyright © 2011-2022 走看看