分析Demo1闪灯例程里的main.c

源文件:

https://github.com/wangsanhust/STM32F429_Discovery_FreeRTOS_9/blob/master/Projects/Demo1/main.c

分析int main(void)程序构成:

int main(void)
{
  1.Hardware_Init();  //硬件初始化,本例中GPIO的使能、输出方式、输出速度、等。

  2.vTraceEnable(TRC_INIT);   //Trace初始化
     vTraceEnable(TRC_START);   //Trace开启   Trace是什么?功能?  ???  留

  4.xTaskCreate();    //创建任务1,指向一个无限循环函数ToggleLED1_Task,设置优先级3);

    xTaskCreate();    //创建任务2,指向一个无限循环函数ToggleLED2_Task,设置优先级2)。

  4.vTaskStartScheduler();   //开始任务调度。

  5.for( ; ; );    //???

}

分析void ToggleLED1_Task(void *pvParameters)函数:

void ToggleLED1_Task(void *pvParameters)  //toggle 触发器
{
    int led = 0;  //设一个灯的状态量

    while (1)
    {
        if(led == 0)
        {
            Red_LED_On();
            led = 1;
        }
        else
        {
            Red_LED_Off();
            led = 0;
         }
        vTaskDelay(1000 / portTICK_RATE_MS);    //灯的状态改变一次延时1000ms
  }
}

分析void Red_LED_On(void)、void Red_LED_Off(void)

void Red_LED_On(void)
{
//    GPIO_SetBits(GPIOG, GPIO_Pin_14);
    GPIOG->ODR |= 0x4000;        //按位 或 ,使某位置一,不改变其他位。0x4000即 0100 0000 0000 0000  (“1”使14位变为1)
}

void Red_LED_Off(void)
{
//    GPIO_ResetBits(GPIOG, GPIO_Pin_14);
  GPIOG->ODR &= 0xBFFF;          //按位 与 ,使某位清零,不改变其他位。0xBFFF即 1011 1111 1111 1111  (“0”使14位变为0)
}

//对GPG的数据寄存器里的GPG14置一或清零,以使该口输出1(亮)或0(灭)。
时间: 2024-10-02 02:18:13

分析Demo1闪灯例程里的main.c的相关文章

魔兽世界服务器Trinitycore分析二:auth server的main函数

TrinityCore由生成两个执行文件authserver和world server以及一堆DLL(或so)文件的子项目组成(先忽略map_extractor等几个工具项目). authserver是登录验证服,它主要提供登录验证和获取服务器(区服)列表的功能.world server是真正的游戏服务器,提供游戏里的一切功能.相对而言,auth server比较简单,那我就从它入手啊,先看一下它的main函数,在源码的基础上,我加上了注释. //该函数在src\server\authserve

基于Python分析金庸小说里的主角,原来他才是真正的主角!

粉丝独白 说起武侠小说,不得不提中国武侠小说三大宗师--金庸.梁羽生.古龙,从上世纪七八十年代开始,大量的武侠经典出现在荧幕之中.三位大师的文字作品几乎都读过,在学习Python和数据分析后又发现了很多好玩的东西,今天就用数据分析来探索一下武侠小说. 要点: 谁是主角(金庸) 用词习惯(梁羽生) 一:谁是金庸小说的主角 天龙八部是一部多主角小说,萧峰.虚竹.段誉三兄弟各有际遇,曾经还因谁才是第一主角的问题引发过一阵争论. 现在我们已经懂得用数据思维来考虑问题,看看怎样对中文小说进行数据分析吧.出

Jib构建镜像的问题分析(Could not find or load main class ${start-class})

问题简述 通过Jib插件将SpringBoot工程制作成Docker镜像成功,但是运行镜像的时候报错(Could not find or load main class ${start-class}),今天来一起分析这个问题,希望能帮读者跳过小坑. 关于Jib插件 在Maven工程中可以使用Jib插件将当前Java工程构建成Docker镜像,详情请参考: <Docker与Jib(maven插件版)实战>; <Jib使用小结(Maven插件版)>; 环境信息 操作系统:macOS M

Java里的main()报错

写了一点java的程序,结果报错 The method main cannot be declared static; static methods can only be declared in a static or top level type,找了好长时间,结果是上一个类,少写了一个大括号 “}”  ,然后就一直报错.加上一个大括号,就可以了. 原文地址:https://www.cnblogs.com/tianqianlan/p/11094089.html

性能分析 函数粒度 函数里的一条语句 汇编 反编译 机器指令

在Linux下做性能分析3:perf - 知乎 https://zhuanlan.zhihu.com/p/22194920 Linux Perf 性能分析工具及火焰图浅析 - 知乎 https://zhuanlan.zhihu.com/p/54276509 perf record -a -g -e cycles -e cs #系统整体采样 查看指定进程 redis-server perf report --pid 7070 mysqld perf report --pid 5634 Sample

第七章之main函数和启动例程

main函数和启动例程 为什么汇编程序的入口是_start,而C程序的入口是main函数呢?本节就来解释这个问题.在讲例 18.1 "最简单的汇编程序"时,我们的汇编和链接步骤是: $ as hello.s -o hello.o$ ld hello.o -o hello以前我们常用gcc main.c -o main命令编译一个程序,其实也可以分三步做,第一步生成汇编代码,第二步生成目标文件,第三步生成可执行文件: $ gcc -S main.c$ gcc -c main.s$ gcc

[汇编与C语言关系]2. main函数与启动例程

为什么汇编程序的入口是_start,而C程序的入口是main函数呢?以下就来解释这个问题 在<x86汇编程序基础(AT&T语法)>一文中我们汇编和链接的步骤是: $ as hello.s -o hello.o $ ld hello.o -o hello 我们用gcc main.c -o main开编译一个c程序,其实际分为三个步骤:编译.汇编.链接 $ gcc -S main.c 生成汇编代码 $ gcc -c main.s 生成目标文件 $ gcc main.o 生成可执行文件 我们

为什么c程序里一定要写main函数

一. 学习过程 编写程序f.c: 对其进行编译,正常通过,再对其进行连接,出现错误: 显示的出错信息为: 翻译成中文是:在c0s模块没有定义符号’_main’. 那么这个错误信息可能与文件c0s.obj有关.那么是什么原因导致编译出错呢? 既然已经将程序编译成了obj文件,那么用之前我们经常使用的link.exe能否将它连接呢?结果是可以的: 用debug查看f.exe: 程序是从06fb:0到06fb:001c,一共29个字节.但是整个程序的代码有541字节: 执行最后一条ret指令,返回到b

王爽-汇编语言-综合研究四-不使用main函数编程

(一) 研究目的 使用C语言编程,我们一定要使用main函数么? (二) 研究过程 1) 最初的程序 首先,我们编写一个不写main函数的C语言程序. 程序如下: 在编译的过程中,没有发现错误.在链接的过程中发现出现的错误如下: 链接时出现Undefined symbol ‘_main’ in module c0s 这样的错误信息,可能main函数与c0s.obj这个文件有关系. 这时我们想,C语言编译之后的文件后缀名是什么?是.obj.那汇编语言编译后的文件名是什么?也是.obj.这两个文件有