Arduino C编程中free()函数挂机

最近我在尝试写一个描述机器人比赛场地的代码时,在内存分配上遇到了挂机的问题。代码在Arduino提供的编译平台上全部通过,但是在实际运行时,往往无法跑完测试程序。经过测试发现代码在obstacle对象的构造函数中调用的segajouter(segment tmp)的free(void*ptr)函数中挂机。Arduino使用的是Uno

主题测试程序如下:
#include "ensemble.h"
#include "segment.h"
#include "jonction.h"
#include "obstacle.h"
ensemble set,set2;//结点集合类对象
long x=10,y=45,g=3,h=0;//设置参数
void setup()
{
Serial.begin(115200);
Serial.println(F("Please input a digit:"));
}
void loop()
{
//=====================================================
//Teste de la classe obstacle障碍物类测试

  jonction test;
  if(Serial.available()>0)
  {
    Serial.print(F("Free Ram: "));//显示可用内存
    Serial.println(freeRam());//显示可用内存
    Serial.read();
    Serial.print(set2.length());
    for(int i=0;i<4;i++)
    {
      test.set_point(x,y);
      test.set_g(g);
      test.set_h(h);
      x=y-x;
      y=g+x;
      g=x*g;
      h=g-y;
      set2.ajouter(test);
      Serial.print(F("Free Ram: "));
      Serial.println(freeRam());
      output(set2.jonc()[i]);//输出读取内容(可能有出入)
                           //因为添加结点时已经对集合中元素依据f()的大小
                            //排序
    }

    Serial.print(F("Free Ram:"));//显示可用内存
    Serial.println(freeRam());//显示可用内存

    obstacle obs(set2);

    Serial.print(F("Free Ram:"));//显示可用内存
    Serial.println(freeRam());//显示可用内存

    Serial.print(F("NumJonc:"));//输出结点数
    Serial.println(obs.NumJonc());
    Serial.print(F("NumEdge:"));//输出边数
    Serial.println(obs.NumEdge());
    set=obs.jonc();
    Serial.println(F("Set2:"));
    for(int i=0;i<set2.length();i++)//查看set2对象记录的结点
    output(set2.jonc()[i]);
    Serial.println(F("Set:"));//查看set对象记录的结点
    for(int i=0;i<set.length();i++)
    output(set.jonc()[i]);
    set.vide();//清空set对象
    Serial.print(F("Length de set:"));//查看set对象元素个数
    Serial.println(set.length());
    x=h;//重新设置测试值
    y=g;
    g=y-x;
    h=g/2;
    for(int i=0;i<2;i++)
    {
      test.set_point(x,y);
      test.set_g(g);
      test.set_h(h);
      x=y-x;
      y=g+x;
      g=y%x;
      h=g*x;
      set.ajouter(test);//更新set集合
    }
    Serial.println(F("Set:"));//查看set元素
    for(int i=0;i<set.length();i++)
    output(set.jonc()[i]);
    obstacle ob(set);//创建障碍物对象
    if(ob==obs)//检测重载算符==
    Serial.println(F("True"));
    else
    {
    Serial.println(F("False"));
    ob.reset(set2);//重置ob,使得ob与obs相同
    if(ob==obs)//检测重载算符==
    Serial.println(F("True"));
    else
    Serial.println(F("Err"));
    }
  }
}
//功能函数
void output(jonction test1)//输出结点参数
{
    Serial.print(F("(x,y,F,G,H)"));
    Serial.print('(');
    Serial.print(test1.getx());
    Serial.print(',');
    Serial.print(test1.gety());
    Serial.print(',');
    Serial.print(test1.f());
    Serial.print(',');
    Serial.print(test1.g());
    Serial.print(',');
    Serial.print(test1.h());
    Serial.println(')');
}
long input()//读取输入
{
  long n=0;
  boolean flag=false;
  char ch;
  if(Serial.available()>0)
  {
    ch=Serial.read();
    if(ch=='-')
    {
      flag=true;
      delay(2);
      ch=Serial.read();
    }
    n=long(ch-'0');
    delay(2);
  }
  while(Serial.available()>0)
  {
    ch=Serial.read();
    if((ch-'0')<10&&(ch-'0')>=0)
    n=10*n+long(ch-'0');
    else break;
    delay(2);
   }
   if(flag)
   n*=-1;
  return n;
}
int freeRam ()//检测可用内存
{
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}

类里头是这样定义的:

    #include "obstacle.h"
    #include "ensemble.h"
    #include "segment.h"
    #include "stdlib.h"
    #include "Arduino.h"
int freeRam1 ()
{
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
void obstacle::segajouter(segment tmp)
//Generer une liste de segment dynamiquement
//n indique le nombre des éléments de *s
{
    segment *ss;
    n+=1;
    Serial.print(F("Hello "));
    ss=(segment*)malloc(sizeof(tmp)*n);
    if (ss == NULL)
        Serial.println(F("malloc failed!"));
    for(int i=0;i<n-1;i++)
        ss[i]=edge[i];
    ss[n-1]=tmp;
//  s=(segment*)realloc(edge,n*sizeof(tmp));
    Serial.print(F("brave "));
//        if(s!=NULL)
//        edge=s;
//          edge[n-1]=tmp; 
    free(edge);
    Serial.println(F("world!"));
    edge=ss;
    ss=NULL;
}
obstacle::obstacle(ensemble set)
{
    vertex=set;
    Serial.print(F("Free Ram: "));
    Serial.println(freeRam1());
    N=set.length();
    n=0;
    Serial.println(F("Loop"));
    for(int i=0;i<N-1;i++)
        for(int j=i+1;j<N;j++)
            {
                    segment tmp(vertex.jonc()[i],vertex.jonc()[j]);
        segajouter(tmp);
                    Serial.print(F("i="));
                    Serial.print(i);
                    Serial.print(F(" j="));
                    Serial.println(j);
                    Serial.print(F("Free Ram: "));
                    Serial.println(freeRam1());
        }
}
int obstacle::NumJonc()
{
    return N;
}
int obstacle::NumEdge()
{
    return n;
}
void obstacle::reset(ensemble set)
{
    vertex=set;
    free(edge);
    N=set.length();
    n=0;
    for(int i=0;i<N-1;i++)
    for(int j=i+1;j<N;j++)
    {
                    segment tmp(vertex.jonc()[i],vertex.jonc()[j]);
            segajouter(tmp);
    }
}
ensemble obstacle::jonc()
{
    return vertex;
}
segment* obstacle::Edge()
{
    return edge;
}
boolean obstacle::operator ==(obstacle ob)
{
    if(ob.jonc().length()==vertex.length()&&ob.jonc().jonc()==vertex.jonc())
        return true;
    return false;
}

以下是第一次在单片机上跑程序的反馈(由于原注释是部分使用法语的,可能与前面的程序的显示内容有点出入):

Veuillez entrer huit nombres en les séparant par ' ':
Free Ram: 1737
0Free Ram: 1713
(x,y,F,G,H)(10,45,3,3,0)
Free Ram: 1667
(x,y,F,G,H)(35,38,172,105,67)
Free Ram: 1599
(x,y,F,G,H)(3,108,522,315,207)
Free Ram: 1509
(x,y,F,G,H)(105,420,65730,33075,32655)
Free Ram:1509
Free Ram: 1435
Loop
Hello brave world!
i=0 j=1
Free Ram: 1435
Hello brave world!
i=0 j=2
Free Ram: 1435
Hello brave world!
i=0 j=3
Free Ram: 1301
Hello brave world!
i=1 j=2
Free Ram: 1123
Hello brave world!
i=1 j=3
Free Ram: 901
Hello brave world!
i=2 j=3
Free Ram: 901
Free Ram:975
NumJonc:4
NumEdge:6
Set2:
(x,y,F,G,H)(10,45,3,3,0)
(x,y,F,G,H)(35,38,172,105,67)
(x,y,F,G,H)(3,108,522,315,207)
(x,y,F,G,H)(105,420,65730,33075,32655)
Set:
(x,y,F,G,H)(10,45,3,3,0)
(x,y,F,G,H)(35,38,172,105,67)
(x,y,F,G,H)(3,108,522,315,207)
(x,y,F,G,H)(105,420,65730,33075,32655)
Length de set:0
Set:
(x,y,F,G,H)(33390,66780,0,0,0)
(x,y,F,G,H)(0,33390,115621,33390,16695)
Free Ram: 901
Loop
Hello brave world!
i=0 j=1
Free Ram: 901
False
Hello brave world!
He

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
请问arduino库中都包含哪些函数?
请问arduino库中都包含哪些函数? 比如说stepper库 非常感谢您的回答!
关于Arduino+W5100+DHT11检测温湿度 中Arduino的编程问题
下面是《完美图解物联网IOT实操》里面的示例代码 ``` #include "SPI.h" #include "Ethernet.h" #include "WebServer.h" #include "Streaming.h" // 引用处理字符串的库(参阅下文说明) #include "dht11.h" dht11 DHT11; // 声明 DHT11 程序对象 const byte dataPin = 2; // 声明 DHT11 模块的数据输入脚位 static byte mac[] = { 0xF0, 0x7B, 0xCB, 0x4B, 0x7C, 0x9F }; IPAddress ip(192, 168, 1, 25); IPAddress subnet(255, 255, 255, 0); IPAddress gateway(192, 168, 1, 1); WebServer webserver("", 80); P(htmlHead) = "<!doctype html><html>" "<head><meta charset=\"utf-8\">" " <meta http-equiv=\"refresh\" content=\"3\">" "<title>Arduino 温湿度计</title>" "</head><body>"; P(htmlFoot) = "</body></html>"; void defaultCmd(WebServer &server, WebServer::ConnectionType type, char *, bool) { int chk = DHT11.read(dataPin); char buffer[5] = ""; server.httpSuccess(); if (type != WebServer::HEAD){ server.printP(htmlHead); if (chk == 0) { server << "<h1>温湿度计</h1>"; server << "<p>温度:" << dtostrf(DHT11.temperature, 5, 2, buffer) << "&deg;C</p>"; server << "<p>湿度:" << dtostrf(DHT11.humidity, 5, 2, buffer) << "%</p>"; } else { server << "<h1>无法读取温湿度值</h1>"; } server.printP(htmlFoot); } } void dht11Cmd(WebServer &server, WebServer::ConnectionType type, char *, bool) { int chk = DHT11.read(dataPin); char buffer[5] = ""; server.httpSuccess("text/plain"); // 设置返回「纯文本」内容类型 if (type != WebServer::HEAD) { if (chk == 0) { server << dtostrf(DHT11.temperature, 5, 2, buffer); } else { server << "??"; } } } void thCmd(WebServer &server, WebServer::ConnectionType type, char *, bool) { int chk = DHT11.read(dataPin); char buffer[5] = ""; server.httpSuccess("text/javascript"); if (type != WebServer::HEAD) { if (chk == 0) { server << "{\"t\":" << dtostrf(DHT11.temperature, 5, 2, buffer) << ",\"h\":" << dtostrf(DHT11.humidity, 5, 2, buffer) << "}"; } else { server << "{\"t\":\"?\",\"h\":\"?\"}"; } } } void setup() { Ethernet.begin(mac, ip, gateway, subnet); webserver.setDefaultCommand(&defaultCmd); // 处理「首页」请求 webserver.addCommand("temp", &dht11Cmd); webserver.addCommand("th.json", &thCmd); webserver.begin(); } void loop() { webserver.processConnection(); } ``` 每次用Arduino编译都出现大量错误提示,如下错误信息: ![![图片说明](https://img-ask.csdn.net/upload/201712/21/1513850894_797012.png)图片说明](https://img-ask.csdn.net/upload/201712/21/1513850867_255461.png) ^
请教 Arduino 怎么编程让舵机进行变速运动?
网上买了块arduino的控制器,买了几个总线舵机装备做一个四足机器人,用店家给的控制程序发现只能实现匀速的舵机模式运动,想问一下如何编程算法可以实现舵机仿生的变速运动。
用arduino ide 写程序控制sim900a发送中文短信
为啥只能发送英文短信,发送中文只收到一个符号,用unicode转码后也不管用,求帮助 代码如下: void sendmessage(){ Serial.println("AT"); delay(2000); Serial.println("AT+CMGF=1"); delay(2000); Serial.println("AT+CSCS=“UCS2”"); delay(2000); Serial.println("AT+CSMP=17,167,2,25"); delay(2000); Serial.println("AT+CMGS=\"\u0031\u0037\u0038\u0036\u0033\u0035\u0032\u0033\u0038\u0034\u0036\"");//转码后的手机号 delay(2000); Serial.print("\u5bb6\u4e2d\u71c3\u6c14\u6cc4\u6f0f");转码后的中文短信 delay(2000); Serial.write(0x1A); }
Arduino接收串口命令的函数,在PC端分别发送字符”A”,”B”,”C”能够控制LED显示三种不同亮度?
在运行的时候,串口输入a,b,c,led灯一直亮,没有变化 ``` #define LED_PIN 1 void setup() { Serial.begin(9600); pinMode(1, OUTPUT); } void loop() { while (Serial.available()) { char abc = Serial.read(); if(abc == 'a'){ Serial.println("ledLevel=10"); analogWrite(1, 10); delay(2000); } if(abc == 'b'){ Serial.println("ledLevel=100"); analogWrite(1, 100); delay(2000); } if(abc == 'c'){ Serial.println("ledLevel=200"); analogWrite(1, 200); delay(2000); } } } ``` ![图片说明](https://img-ask.csdn.net/upload/201905/02/1556761935_700463.png)
Arduino通过ESP8266怎么把串口数据发送给服务器在Mysql数据库显示?
Arduino通过ESP8266怎么把串口数据发送给服务器在Mysql数据库显示? 求代码!万分感谢!这个问题困扰小白很久了!
如何将C++中的数据发送到Arduino开发板?
本人做的项目,需要将在C++中所运行好的数据(如num)发送到Arduino开发板中,以实现开发板在不同数据的情况下进行不同的响应。 求大神指教!
用arduino实现温湿度传感器dht11,求大佬帮我看看代码,怎样写才能实现读取传感器信号?
``` int DHTpin=2; byte dat[5]; //------------------------------------------------------ byte read_data() { byte data; for(int i=0;i<8;i++) { if(digitalRead(DHTpin)==LOW) { while(digitalRead(DHTpin)==LOW) ; delayMicroseconds(30); if(digitalRead(DHTpin)==HIGH) data|=(1<<(7-1)); while(digitalRead(DHTpin)==HIGH) ; } } return data; } //------------------------------------------------------ void start_test(){ digitalWrite(DHTpin,LOW); delay(30); digitalWrite(DHTpin,HIGH); delayMicroseconds(40); pinMode(DHTpin,INPUT); while(digitalRead(DHTpin)==LOW) ; delayMicroseconds(80); for(int i=0;i<5;i++) dat[i]=read_data(); pinMode(DHTpin,OUTPUT); digitalWrite(DHTpin,HIGH); } void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(DHTpin,OUTPUT); } void loop() { // put your main code here, to run repeatedly: start_test(); for(int i=0;i<5;i++) { Serial.print("dat["); Serial.print(i); Serial.print("]="); Serial.print(dat[i]); Serial.print(' '); } delay(700); } ``` 为什么串口监视器上一直显示0![图片说明](https://img-ask.csdn.net/upload/202001/11/1578731026_362333.png) read_data()里的代码该怎么写?
关于Arduino,serial函数的问题
对于串口函数,我有一个问题,就是我们可以通过IDE进行这个函数 但是这里面涉及到一个串口缓存区的问题 这个串口缓存区其实就是数据的中介 但是我有一个问题 这个串口缓存区是在咱们Arduino板的什么位置呢? 求大神解释
arduino基于红外线控制
例如红外遥控小车,红外空调遥控器,遥控器上的按键对应着一个功能,如何通过模式切换使相同按键拥有两个不同的功能 下面的代码是基于红外线控制LCD1602 设置了两个功能按键,输入文字和输入数字,声明和调用了两个函数但是无法运行,希望大家能给出建议 ``` #include<IRremote.h> #include <IRremoteInt.h> #include <LiquidCrystal.h> LiquidCrystal lcd(11,10,9,8,7,6); #define RECV_PIN 13 IRrecv irrecv(RECV_PIN); decode_results results; void words(); void number(); void setup() { Serial.begin(9600); lcd.begin(16,2); Serial.println("Enabling IRin"); irrecv.enableIRIn(); Serial.println("Enabled IRin"); lcd.clear(); lcd.setCursor(0,0); } void words() { if (irrecv.decode(&results)) { if(results.value==0xFF30CF) {lcd.setCursor(2,0);lcd.print("Hello World!");delay(2000);lcd.clear();} else if(results.value==0xFF18E7) {lcd.setCursor(3,0);lcd.print("Tian Ji");delay(2000);lcd.clear();} else if(results.value==0xFF7A85) {lcd.setCursor(3,0);lcd.print("Da Xue");delay(2000);lcd.clear();} else if(results.value==0xFF10EF) {lcd.setCursor(3,0);lcd.print("Ren Ai");delay(2000);lcd.clear();} else if(results.value==0xFF38C7) {lcd.setCursor(3,0);lcd.print("Xue Yuan");delay(2000);lcd.clear();} else if(results.value==0xFF5AA5) {lcd.setCursor(3,0);lcd.print("Welcome!");delay(2000);lcd.clear();} else if(results.value==0xFF42BD) {lcd.setCursor(3,0);lcd.print("Ni Hao!");delay(2000);lcd.clear();} else if(results.value==0xFF4AB5) {lcd.write("Nice to meet you");delay(2000);lcd.clear();} else if(results.value==0xFF52AD) {lcd.setCursor(4,0);lcd.print("Bye-bye");delay(2000);lcd.clear();} } } void number() { lcd.leftToRight(); if(irrecv.decode(&results)) { if(results.value==0xFF30CF) {lcd.print("1");delay(100);} else if(results.value==0xFF18E7) {lcd.print("2");delay(100);} else if(results.value==0xFF7A85) {lcd.print("3");delay(100);} else if(results.value==0xFF10EF) {lcd.print("4");delay(100);} else if(results.value==0xFF38C7) {lcd.print("5");delay(100);} else if(results.value==0xFF5AA5) {lcd.print("6");delay(100);} else if(results.value==0xFF42BD) {lcd.print("7");delay(100);} else if(results.value==0xFF4AB5) {lcd.print("8");delay(100);} else if(results.value==0xFF52AD) {lcd.print("9");delay(100);} else if ( results.value==0xFF6897) {lcd.print("0");delay(100);} } } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); if (results.value==0xFFE21D) {delay(1000);lcd.clear();lcd.print("screen opening...");delay(1000);lcd.clear();} else if (results.value==0xFFA25D) {lcd.setCursor(3,0);lcd.print("screen off");delay(1000);lcd.clear();} else if (results.value==0xFF629D) {lcd.clear();} else if (results.value==0xFF22DD) {lcd.setCursor(3,0);lcd.print("Input words:");delay(1000);lcd.clear();words();} else if (results.value==0xFF02FD) {lcd.setCursor(3,0);lcd.print("Input number:");delay(1000);lcd.clear();number();} irrecv.resume(); } delay(1000); } ``` ```
arduino中如何从电脑端存入串口缓存区数据
arduino中有关Serial的系列函数主要介绍了五个,其中有几个是涉及到输出的。csdn博客中有代码如下,作用是输出串口缓存区中的数据 我特别想不明白的是,就下面这个代码来讲,缓存区根本就没有存入数据,怎么能读取呢,我专门试了一下,确实没反应,上网查资料,也没找到相关解释,网上有关串口缓存区的主要涉及到清空和输出,没有看到有输入的,请问,到底能不能从电脑端输入数据进入arduino的缓存区呢,要是能的话要用哪些函数或者方法呢 ``` void setup() { Serial.begin(9600); //设置波特率为9600,一般是这个波特率 } void loop() { if(Serial.available()>0)//如果串口有数据进入的话 { char c=Serial.read();//每次读一个字符,是ASCII码的 } } ```
arduino 红外遥控器设置功能按键
给红外遥控器设置两个功能按键,文字输入和数字输入,按下后再去按1-9按键可在LCD1602上显示数字或设置好的一串字母,红外遥控模块和LCD显示模块都没有问题,只是判断按键后执行语句中无法再次进行判断,功能键的功能无法执行,不知道有什么方法可以解决,代码如下,球球各位大神给指点一下 ``` #include <IRremote.h> #include <IRremoteInt.h> #include <LiquidCrystal.h> LiquidCrystal lcd(11,10,9,8,7,6); #define RECV_PIN 13 IRrecv irrecv(RECV_PIN); decode_results results; void words(); void number(); void setup() { Serial.begin(9600); lcd.begin(16,2); Serial.println("Enabling IRin"); irrecv.enableIRIn(); Serial.println("Enabled IRin"); lcd.clear(); lcd.setCursor(0,0); } void words() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); if(results.value==0xFF30CF) {lcd.setCursor(2,0);lcd.print("Hello World!");delay(2000);lcd.clear();} else if(results.value==0xFF18E7) {lcd.setCursor(3,0);lcd.print("Tian Ji");delay(2000);lcd.clear();} else if(results.value==0xFF7A85) {lcd.setCursor(3,0);lcd.print("Da Xue");delay(2000);lcd.clear();} else if(results.value==0xFF10EF) {lcd.setCursor(3,0);lcd.print("Ren Ai");delay(2000);lcd.clear();} else if(results.value==0xFF38C7) {lcd.setCursor(3,0);lcd.print("Xue Yuan");delay(2000);lcd.clear();} else if(results.value==0xFF5AA5) {lcd.setCursor(3,0);lcd.print("Welcome!");delay(2000);lcd.clear();} else if(results.value==0xFF42BD) {lcd.setCursor(3,0);lcd.print("Ni Hao!");delay(2000);lcd.clear();} else if(results.value==0xFF4AB5) {lcd.write("Nice to meet you");delay(2000);lcd.clear();} else if(results.value==0xFF52AD) {lcd.setCursor(4,0);lcd.print("Bye-bye");delay(2000);lcd.clear();} } } void number() { lcd.leftToRight(); if(irrecv.decode(&results)) { Serial.println(results.value, HEX); if(results.value==0xFF30CF) {lcd.print("1");delay(100);} else if(results.value==0xFF18E7) {lcd.print("2");delay(100);} else if(results.value==0xFF7A85) {lcd.print("3");delay(100);} else if(results.value==0xFF10EF) {lcd.print("4");delay(100);} else if(results.value==0xFF38C7) {lcd.print("5");delay(100);} else if(results.value==0xFF5AA5) {lcd.print("6");delay(100);} else if(results.value==0xFF42BD) {lcd.print("7");delay(100);} else if(results.value==0xFF4AB5) {lcd.print("8");delay(100);} else if(results.value==0xFF52AD) {lcd.print("9");delay(100);} else if ( results.value==0xFF6897) {lcd.print("0");delay(100);} } } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); if (results.value==0xFFE21D) {delay(1000);lcd.clear();lcd.print("screen opening...");delay(1000);lcd.clear();} else if (results.value==0xFFA25D) {lcd.setCursor(3,0);lcd.print("screen off");delay(1000);lcd.clear();} else if (results.value==0xFF629D) {lcd.clear();} else if (results.value==0xFF22DD) {lcd.setCursor(3,0);lcd.print("Input words:");delay(1000);lcd.clear();words();} else if (results.value==0xFF02FD) {lcd.setCursor(3,0);lcd.print("Input number:");delay(1000);lcd.clear();number();} irrecv.resume(); } delay(1000); } ```
小白求教Arduino yun实例
刚学Arduino ,想要请问下Arduino yun实现与P C间的通信有实例吗?Arduino和Arduino yub间的区别是什么呢?希望可以分享下谢谢
如何将自定义类的对象保存在Arduino的Flash中?
最近在编写Arduino Uno上的程序时,遇到了内存不足的问题。鉴于在Flash里头的内存空间十分充裕,而SRAM中只有2k bytes,我希望能够把自己定义类的对象数据保存在Flash里头,等到需要调用的时候再调到SRAM里头进行处理。不知哪位大神能够指导一下这需要如何操作呀? 最好额外说明一下,读与写两种情况,并给几个例子哟!谢谢啦!
【新人求助】用Arduino串口输入句子显示在LCD1602上,换行的时候为什么前一行显示出来了,在后一行的后半段没了???
我想把信息从Arduino串口输入,在LCD1602上显示出来。但结果不尽人意。 这是我的接线,应该没什么问题吧![图片说明](https://img-ask.csdn.net/upload/201911/14/1573742781_501925.jpg) 这是我的代码:![图片说明](https://img-ask.csdn.net/upload/201911/14/1573743064_183393.png)![图片说明](https://img-ask.csdn.net/upload/201911/14/1573743071_465735.png) 我输入abcdefghijklmnopqrstuvwxyz![图片说明](https://img-ask.csdn.net/upload/201911/14/1573743146_542290.jpg) 结果下一行的出不来了![图片说明](https://img-ask.csdn.net/upload/201911/14/1573743188_988362.jpg) 我再输入ab![图片说明](https://img-ask.csdn.net/upload/201911/14/1573743207_856180.jpg) 就成了这样![图片说明](https://img-ask.csdn.net/upload/201911/14/1573743229_979808.jpg) 请问大神为什么会这样??应该如何解决呢???万分感谢!!
arduino与android蓝牙通信
Arduino与android蓝牙通信。在做一个Arduino的项目,在Arduino的板子上装有温度传感器,然后希望通过蓝牙实时传输到android,请问怎么实现?
arduino如何接受数字传感器的信号
学习arduino遇到点疑惑,请大家帮忙指点下怎么办? arduino使用dht22温湿度传感器按照参考教程需要导入一个头文件dht,使用时要调用相关函数,读出具体的温湿度,从而打印输出。 但是很多传感器并非为arduino设计,但是可以兼容使用。没有现成的头文件,这种情况怎么arduino如何接受数字信号呢? 我查了很多资料,只能查到数字引脚可以通过判断low还是high来输出0或者1,但是像温湿度传感器这样的,输出内容不会这么简单,至少是整数或者是小数,因此怎么样才能让arduino接收到数字传感器所发出的8bits数据呢 因为是初学者,对于传感器所说的Data bits不理解,这个8bits的到底能表达一个多大数据量呢,看起来不应该只是0和1,感觉应该更大一点
新人求解:Ardunio蓝牙模块:为什么我的得到的结果是这样子??
我用的Arduino UNO,蓝牙模块HC-06。 Arduino TX接蓝牙RX, Arduino RX接蓝牙TX。 Arduino 3.3v接蓝牙VCC, Arduino GND接蓝牙GND。 我的代码: void setup() { Serial.begin(9600); } void loop() { while(Serial.available()) { char message=Serial.read(); Serial.print(message); delay(2); } } 我在手机上输入的分别是:hello world、we are champion、I Love You、WDNMD、 hello world、we are champion、I Love You、WDNMD. 在串口看到的就是这样的(图),想问一下大神为什么会这样,要如何解决呢???![图片说明](https://img-ask.csdn.net/upload/201911/13/1573657816_273913.png)
ESP32-cam 虚拟机官方环境开发 make flash monitor时出出现错误。
ESP32-cam 虚拟机官方环境开发 make flash monitor时出出现错误。 应该是ESP-IDF的版本太老了???可是不知道该如何更新啊。 有没有人能解答一下啊,调试这个玩意搞了三天了,与一开始用arduino开发,结果环境一直配置不起来,后来用官方虚拟机开发,咋还是不行呢。我好南啊。。。。错误如下面的图片。 ![图片说明](https://img-ask.csdn.net/upload/201912/13/1576209988_287235.jpg)![图片说明](https://img-ask.csdn.net/upload/201912/13/1576209998_787558.jpg)![图片说明](https://img-ask.csdn.net/upload/201912/13/1576210008_241766.jpg)
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
相关热词 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件 c#注册dll文件 c#安装.net
立即提问