精华内容
下载资源
问答
  • setup和loop函数
    千次阅读
    2020-04-04 17:38:04

    转至:https://www.cnblogs.com/zhangfeionline/p/5588902.html

    今天看arduino的源代码,对于arduino中的setup和loop有了新的理解,可能你以前对于这俩个函数就是知道arduino是初始化,而loop是死循环,但是托若你看了Arduino的主函数你会有更加清晰的认知
    下面贴出arduino的main函数
    #include <Arduino.h>

    int main(void)
    {
    init();
    setup();
    for (;;) {
    loop();
    if (serialEventRun) serialEventRun();
    }
    return 0;
    }
    这就不多说了,一直写的函数就是俩个子函数

    int led=12;

    void setup()
    {
    pinMode(led,OUTPUT);
    }
    void loop()
    {
    digitalWrite(led,HIGH);
    delay(1000);
    digitalWrite(led,LOW);
    delay(1000);
    }

     

    更多相关内容
  • 祝好__by Dxg_LC 目录:Dxg_C# 开发小技巧整理集合 1、 2、因此,通常见到的 setup()函数 loop()函数,只是底层的一个子函数 Dxg-原创出品,如需转载,请注明出处; 序言: 1、以上链接为方便整理查看资料用;伴随...

    VS-C++ 系列:所有相关C++文章链接.
    VS-C# 系列:所有相关C#文章链接.
    bat 系列:所有相关bat文章链接.
    OpenCV 系列:所有相关OpenCV文章链接.


    AD 系列:所有相关文章链接
    Keil 系列:所有相关文章链接
    Arduino 系列:所有相关Arduino文章链接


    Git SVN 系列:所有相关Git SVN文章链接


    Linux 系列:所有相关文章链接


    所有内容均以最小系统调试成功;逐步提供低分源码工程下载
    保证每行代码都经过验证!
    如有疑惑,欢迎留言,看见即回;祝好__by Dxg_LC

    序言:
    1、以上链接为方便整理查看资料用;伴随博文发布更新,如果有不正确处,感谢指正
    2、因本人能力有限若有不正确之处或者相关超链接失效,请于相关文章内提醒@博主;灰常感谢
    3、友情提醒1,勿要《一支烟 + 一杯茶 == 一坐一下午》 身体重要,革命本钱;
    4、友情提醒2,多喝热水;
    5、友情提醒3,听媳妇话+多点时间陪家人;
    在这里插入图片描述

    1、

    int main(void)
    {
    	init();//系统级别-初始化函数
    
    	setup();//用户级别-初始化函数
    
    	for (;;) 
    	{
    		loop();//用户级别-循环函数
    
    		if (serialEventRun) serialEventRun();//用户级别-串口接收中断函数[默认没显示出来]
    	}
    
    	return 0;
    }
    

    2、因此,通常见到的 setup()函数 loop()函数,只是底层的一个子函数

    在这里插入图片描述

    Dxg-原创出品,如需转载,请注明出处;

    欢迎收藏,点赞;"一键三联"走起,LOL
    在这里插入图片描述

    展开全文
  • Arduino之程序结构(setuploop函数

    万次阅读 2020-11-10 22:08:49
    } 通过以上程序可见,Arduino程序中编写的setup和loop函数,都在main函数中调用了。 loop的循环执行,是通过for循环实现的,且每次loop结束后,都会进行串口事件判断,也正是因为这种设计,串口事件不能实时响应。

    一、blink源程序分析

    –》源程序如下(注释已翻译):

    // setup函数只运行一次
    void setup() {
      // 初始化LED_BUILTIN引脚为输出引脚
      pinMode(LED_BUILTIN, OUTPUT);
    }
    
    // loop函数会一直循环运行
    void loop() {
      digitalWrite(LED_BUILTIN, HIGH);   // 点亮LED(配置引脚输出高电平)
      delay(1000);                       // 等待1s
      digitalWrite(LED_BUILTIN, LOW);    // 熄灭LED(配置引脚输出低电平)
      delay(1000);                       // 等待1s
    }
    

    这是先说一下电平的概念:

    • 高电平就相当于高电位或高电势;
    • 低电平就相当于低电位或地电势;
    • 两点之间存在电平差就相当于存在电位差或者电势差,从而存在电压。

    程序首先把LED_BUILTIN引脚配置为输出引脚,意思是板子可以控制该引脚输出为高电平或者低电平,LED引脚一端接在板子控制端口,而另外一端是接在参考地上,可以认为参考地是零电平或者低电平。当loop函数开始执行的时候,把控制端引脚输出为高电平,而参考地是低电平,所以LED被点亮,同理把控制端引脚输出为低电平,两点之间没有电位差,因此LED熄灭。


    二、程序结构

    • setup()函数

    Arduino板子通电或复位后,即会开始执行setup() 函数中的程序,该部分只会执行一次。通常我们会在setup() 函数中完成Arduino的初始化设置,如配置I/O口状态,初始化串口等操作。

    –》示例程序:

    // 给13号引脚连接的设备设置一个别名“led”
    int led = 13;
    // 在板子启动或者复位重启后, setup部分的程序只会运行一次
    void setup(){
      // 将“led”引脚设置为输出状态
      pinMode(led, OUTPUT);     
    }
    
    • loop()函数

    在setup() 函数中的程序执行完后,Arduino会接着执行loop() 函数中的程序。而loop()函数是一个死循环,其中的程序会不断的重复运行。通常我们会在loop() 函数中完成程序的主要功能,如驱动各种模块,采集数据等。

    –》示例程序:

    // setup部分程序运行完后,loop部分的程序会不断重复运行
    void loop() 
    {
      digitalWrite(led, HIGH);   // 点亮LED
      delay(1000);           // 等待一秒钟
      digitalWrite(led, LOW);   // 通过将引脚电平拉低,关闭LED
      delay(1000);           // 等待一秒钟
    }
    

    *三、Arduino程序main函数结构解析

    这里作为拓展,以下分析需要C/C++基础!

    在进行Arduino开发时,没有像传统C/C++程序使用入口函数main。实际上main函数存在于Arduino核心库中,且仍然是程序的入口。

    在Arduino核心库中可见main.cpp文件,其内容如下:

    #include <Arduino.h>
    
    // Declared weak in Arduino.h to allow user redefinitions.
    int atexit(void (* /*func*/ )()) { return 0; }
    
    // Weak empty variant initialization function.
    // May be redefined by variant files.
    void initVariant() __attribute__((weak));
    void initVariant() { }
    
    void setupUSB() __attribute__((weak));
    void setupUSB() { }
    
    int main(void)
    {
        init();
        initVariant();
    #if defined(USBCON)
        USBDevice.attach();
    #endif
        setup();
        for (;;) {
            loop();
            if (serialEventRun) serialEventRun();
        }
        return 0;
    }
    

    通过以上程序可见,Arduino程序中编写的setup和loop函数,都在main函数中调用了。
    loop的循环执行,是通过for循环实现的,且每次loop结束后,都会进行串口事件判断,也正是因为这种设计,串口事件不能实时响应

    展开全文
  • Arduino-为什么只有setup和loop函数

    万次阅读 2018-09-18 10:58:43
    Arduino程序main函数结构分析 ...loop函数最后执行死循环while(1): int ledPin = 7; int buzzer = 8; int ledbz(int i);// void setup() { pinMode(ledPin, OUTPUT); pinMode(buzzer,OUTPUT); } ...

    Arduino程序main函数结构分析

     

    如何让loop只执行一次?

    loop函数最后执行死循环while(1):

    
    
    
    int ledPin =  7;   
    int buzzer =  8;
    
    int  ledbz(int i);//
    
    void setup() {
     
      pinMode(ledPin, OUTPUT);
      pinMode(buzzer,OUTPUT);
    }
    
    void loop()
    {
      
      int j;
      ledbz(j);//
      
     while(1);//陷入死循环 
      
    }
    
    
    int  ledbz(int i)//
    {
      for( i=0;i<10;i++)
      {
         
      digitalWrite(ledPin,HIGH);
      digitalWrite(buzzer,HIGH);
      delay(100);
      digitalWrite(ledPin,LOW);
      digitalWrite(buzzer,LOW);
      delay(100);
      
      }
      return i;
    }

    Arduino工程源码分析
    本次分析基于Arduino 1.0.6
    一、我相信大家第一次打开一个Arduino例子的时候,肯定跟我一样,有一种疑惑,
    按以往经验,一般会有一个main函数,可是这里却只有一个loop()函数和setup()函数,
    为什么呢????????

    看到这里,没有main函数怎么运行下去。。。。。。。。。。。。。。。。。。?
    运行机制是怎么样??
    一系列问题。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    然后咱们揭开它神秘的面纱-----
    首先大家可以用代码浏览神器Source Insight来建立一个工程,方便查看
    明确自己Arduino的安装目录,这里我的是D:\Program Files\Arduino
    建立工程后添加源码D:\Program Files\Arduino\hardware\arduino\cores\arduino
    OK!!!建立工程完成后,开始分析---------

    在工程浏览搜索mian 看到出现main.cpp

    看到上面代码 , 是不是恍然大悟了~_~

    这里告诉大家,为什么Arduino里面的loop()函数是执行完一次,再执行,也就是无限次执行loop,for循环,大家都知道
    如果大家想要只执行一次loop()的话,可以考虑来个while(1)
    继续。。。。。。。。。
    看到mian函数里面的init()没有,跟进去,一探究竟

    里面第一句注释:这个函数必须在setup之前执行,否则很多功能将无法工作
    这个初始化函数里面sei().打开所有的中断什么的,还有其他就是些寄存器初始化
    回到mian函数往下看

    _attribute_的weak属性,这里的作用是弱符号:若两个或两个以上全局符号(函数或变量名)名字一样,而其中之一声明为weak symbol(弱符号),则这些全局符号不会引发重定义错误。链接器会忽略弱符号,去使用普通的全局符号来解析所有对这些符号的引用,但当普通的全局符号不可用时,链接器会使用弱符号。
    也就是防止定义的一样产生冲突。
    继续往下是USB功能的使能USBDevice.attch()

    然后是for循环里面的串口

    D:\arduino IDE\Arduino\hardware\arduino\avr\cores\arduino

    /*
      main.cpp - Main loop for Arduino sketches
      Copyright (c) 2005-2013 Arduino Team.  All right reserved.
    
      This library is free software; you can redistribute it and/or
      modify it under the terms of the GNU Lesser General Public
      License as published by the Free Software Foundation; either
      version 2.1 of the License, or (at your option) any later version.
    
      This library is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Lesser General Public License for more details.
    
      You should have received a copy of the GNU Lesser General Public
      License along with this library; if not, write to the Free Software
      Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    */
    
    #include <Arduino.h>
    
    // Declared weak in Arduino.h to allow user redefinitions.
    int atexit(void (* /*func*/ )()) { return 0; }
    
    // Weak empty variant initialization function.
    // May be redefined by variant files.
    void initVariant() __attribute__((weak));
    void initVariant() { }
    
    void setupUSB() __attribute__((weak));
    void setupUSB() { }
    
    int main(void)
    {
    	init();
    
    	initVariant();
    
    #if defined(USBCON)
    	USBDevice.attach();
    #endif
    	
    	setup();
        
    	for (;;) {
    		loop();
    		if (serialEventRun) serialEventRun();
    	}
            
    	return 0;
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    注意:#if  #endif条件注释的使用

    例如:

    #if defined(X)

    print ("hello word!\n") ;

    #endif

    以上编译只与编译宏X有关,与宏定义X的条件是否成立无关。如果定义了X宏,条件即成立,下面print语句会被编译;如果宏X未定义,则print语句不会备编译(只是编译,不是执行!)。


    二、看完后知道了运行机制了吧

    跟进pinMode()函数,基本上都是寄存器和另一些函数的操作

    跟进digitalWrite()函数,还是寄存器和另一些函数的一些操作

    终于明白,原来Arduino只是把底层封装了,让新手远离寄存器的复杂操作

    展开全文
  • Arduino的setup和loop封装内幕

    千次阅读 多人点赞 2018-12-14 00:09:15
    我们知道,arduino是基于c++的,那么按理说一定可以找到main函数,对有编程经验的小伙伴来说,第一次进到...为何莫名其妙的有一个setup和一个loop呢? 其实,这个就是封装后的结果。我们来一起探索一下。 ...
  • Arduino编程语言之setup()和loop()

    千次阅读 2021-08-21 11:38:10
    Arduino编程语言之setup()和loop() setup() 当程序开始执行时,将调用setup()函数,使用此函数 ①用来初始化变量 ②管脚模式 ③调用库函数 注意:setup()函数将只运行一次。 例子: int ledPin = 13; void setup() {...
  • Arduino中Loop函数的意义

    千次阅读 2021-12-08 17:49:32
    Arduino中没有loop函数时,会报莫名其妙的错误是怎么回事
  • run_main_loop uboot 启动以后会进入 3 秒倒计时,如果在 3 秒倒计时结束之前按下按下回车键,那么就会进入 uboot 的命令模式,如果倒计时结束以后都没有按下回车键,那么就会自动启动 Linux 内核 , 这 个 功 能 就...
  • ESP32(一)_点灯

    2022-05-02 18:07:59
    调用pinMode函数,将led的管脚设置为输出模式,同理也可设置为输入模式,看实现功能的需要。如下图所示,我这边led用到的引脚是2,所以我把引脚2设置为输出模式。 pinMode(2,OUTPUT); 实现led闪烁的全部代码如下...
  • Arduino中的setup()和loop()函数

    千次阅读 2016-06-15 21:08:00
    今天看arduino的源代码,对于arduino中的setup和loop有了新的理解,可能你以前对于这俩个函数就是知道arduino是初始化,而loop是死循环,但是托若你看了Arduino的主函数你会有更加清晰的认知下面贴出arduino的main...
  • setup()函数

    万次阅读 2013-10-09 11:29:48
    程序刚启动时,调用setup()函数.用于初始化变量,设置针脚的输出/输入类型,配置串口,引入库文件等等. 每次Arduino上电或重启后,setup函数只运行一次. 例子: int buttonPin = 10; //设置第10个脚为输出或输入 ...
  • loop() 函数

    千次阅读 2013-10-09 11:29:50
    setup()函数中初始化定义了变量之后,loop()函数,顾名思义,不停的循环,根据程序中的内容,根据一些反馈,响应改变执行情况。我们就用loop中的代码控制Arduino板子。 例子: int buttonPin = 10;   /...
  • setup()函数,用于初始化变量,设置针脚的输出/输入类型,配置串口,引入库文件等等, 每次Arduino上电或重启后,setup函数只运行一次。 loop()是循环函数,,该函数在程 序运行过程中不断的循环, 根据一些反馈,相应...
  • 关于函数调用的loop的一个问题

    千次阅读 2012-12-17 14:36:11
    //Q: Given a function ...用两个变量,初始a=b=input,每次迭代中a=f(a),b=f(f(b)),如果函数保证总会进loop,那ab总会相等。就能得到loop长度的一个整倍数,然后能找到loop起点,然后就能O(1)空间找到长度了
  • 用Source Insight追踪Arduino的setup和loop

    千次阅读 2016-03-12 22:07:31
    一般情况下,在ArduinoIDE中编写的程序非常简单,只有setup和loop这两个核心函数。一般的C语言程序都有一个main函数的入口点,而Arduino是基于avr-gcc的二次封装,把这些底层的东西都屏蔽掉了。其实查看Arduino IDE...
  • connect ( 'sqlite.db' , loop = loop ) cur = await conn . cursor () await cur . execute ( "SELECT 42;" ) r = await cur . fetchall () print ( r ) await cur . close () await conn . close () if __...
  • Arduino 常用函数参考文档

    千次阅读 2021-01-28 19:28:12
    Arduino控制器通电或复位后,即会开始执行setup() 函数中的程序,该部分只会执行一次。 通常我们会在setup() 函数中完成Arduino的初始化设置,如配置I/O口状态,初始化串口等操作。 eg.示例程序 // 给13号引脚连接...
  • main_loop函数中两种循环方式介绍

    千次阅读 2014-09-16 15:42:17
    //下面这个函数负责调用解析命令模块命令执行模块 static int builtin_run_command(const char *cmd, int flag) { ........     if (cmd_process(flag, argc, argv, &repeatable))   //执行...
  • setUp()方法

    千次阅读 2021-05-22 10:26:57
    public class CourseSessionTest extends TestCase... }定义局部变量的名字某个成员变量的名字相同,这是合法的。但是,这样意味着无法正确的初始化成员变量session。结果会导致空指针异常(NullPointerException)。
  • uboot的最终目的是引导内核,在此之前uboot需要完成一系列初始化操作,包括设置时钟、初始化DDR、Flash、串口、网卡等等,这时...main_loop()函数分析 我们知道,uboot经过初始化后最终进入main_loop函数,并陷入...
  • Java判断结果笔试题诡计:函数式编程、语言设计、不节制恶作剧的旅程 第一章,故事开始的地方 每个故事都必须从某个地方开始。 这是一个用 C 语言编写的简单的 Scheme 解释器之旅,每个 C 程序都以main()函数开始...
  • 使用 Platform IO 把 setup() loop() 中的 loop 函数删除,点击编译,报了如下错误 提示有一个文件调用了一个没定义的 loop 函数。进入到这个文件,这个文件的内容如下 #include "freertos/FreeRTOS.h" #include...
  • Arduino Nano设置在下载Arduino ... 打开Arduino IDE之后,请确保将以下两个函数添加到您的代码中,因为这两个语言对于Arduino语言都是必需的: void setup() { // setup pin outputs and inputs here } void loop() {
  • setup细节

    2021-12-10 20:12:03
    setup细节 1、setup的执行时机 在beforeCreate之前执行(一次),此时组件对象还没有创建 this是undefined,不能通过this来访问data/computed/methods/props 其实所有的compositionAPI相关回调函数中也都不可以 2、...
  • 第七节 Arduino的自定义函数和

    千次阅读 2020-12-19 18:47:07
    一、Arduino自定义函数如果你想编一些复杂点的程序,实现一些更眩的功能,你会发现你的loop程序会写得非常的长,有时候会搞不清楚具体的一个功能到底写在哪行了。能不能将一个功能的实现写在一个地方,如果要用的时候...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,334
精华内容 12,133
关键字:

setup和loop函数

友情链接: openFile.rar