树莓派-嵌入式开发遇到的问题

树莓派篇

1、系统盘不足导致无法安装东西

显示树莓派磁盘占用量

df -h					

(img-WrtxlYpY-1616206212922)(D:\MyDocument\Study Note\嵌入式开发问题\树莓派-1-1.png)]

打开控制终端界面

sudo raspi-config
#选择 Advance Option->Expand Filesystem->OK

在这里插入图片描述
在这里插入图片描述

2、vim安装失败问题

sudo apt-get install vim
#提示报错
The following packages have unmet dependencies:
 vim : Depends: vim-common (= 2:8.0.0197-4+deb9u3) but 2:8.1.0875-5 is to be installed
E: Unable to correct problems, you have held broken packages.

解决办法

#该方法简单粗暴,关键是还有效
sudo apt-get purge vim-common
sudo apt-get update
sudo apt-get upgrade			#可以不执行该指令(速度太慢)
sudo apt-get install vim
purge 命令是 remove 命令的另一个版本,它可以在删除软件本身的同时,删除软件包的残余设置。类似于 Windows 环境下删除软件后的“软件残余”清理。

执行:sudo apt-get purge 软件名
将删除相关软件,同时删除该软件的配置文件。

3、串口登录不显示信息的问题

  1. HDMI启动树莓派

  2. 打开terminal串口

    输入:
    cat /proc/cmdline
    

在这里插入图片描述

如果不是serial=ttyAMA0,115200就说明问题出在此处(没有配置正确)。

  1. 查看cmdline.txt配置文件

    cat /boot/cmdline.txt
    ls -a /dev/ttyAMA0		#查看ttyAMA0
    
  2. 覆盖config.txt

    # Additional overlays and parameters are documented /boot/overlays/README
    
    # Enable audio (loads snd_bcm2835)
    dtparam=audio=on
    
    [pi4]
    # Enable DRM VC4 V3D driver on top of the dispmanx display stack
    dtoverlay=vc4-fkms-v3d
    max_framebuffers=2
    
    [all]
    #dtoverlay=vc4-fkms-v3d
    dtoverlay=pi3-disable-bt		//停止蓝牙,解除对串口的使用
    start_x=1
    gpu_mem=128
    
  3. 修改cmdline.txt文件

    dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
    
  4. HDMI启动树莓派->terminal

    cat /proc/cmdline			#继续查看
    

在这里插入图片描述

成功!!!

4、编译内核出错:/bin/sh: 1: bison: not found

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig

报错提示:

在这里插入图片描述

原因

  • 缺乏某些库,安装即可。
sudo apt-get install bison
sudo apt-get install flex

结果:成功

在这里插入图片描述

树莓派启动报错:[FAILED] Failed to start /etc/rc.local Compatibility.

1、问题描述:

给树莓派更新了内核后,启动时出现该问题。

在这里插入图片描述

2、解决方法

sudo vi /etc/rc.local		#打开启动失败的rc.local文件
#!/bin/sh -e	# 将该行改成第2行就行了
#!/bin/bash		#酱紫...
# rc.local
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
# In order to enable or disable this script just change the execution
# bits.
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi
config wlan0 192.168.1.117	#固定IP地址
exit 0

3、完成后的测试

sudo reboot 	# 重启树莓派

在这里插入图片描述

成功!

智能家居篇

1、error: field ‘XXX’ declared as a function

int init();

编译报错:

在这里插入图片描述

原因:

结构体元素里的 函数指针定义错误

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <wiringSerial.h>

struct Command{
        char cmdName[128];
        char cmd[32];
        int (*init)();		//之前是酱紫的:int init();
        int (*getCmd)(struct Command *voice);	//之前是酱紫的:int getCmd(struct Command *voice);
        char log[1024];
        int fd;
        struct Command *next;
};

2、pthread.h:236:15: note: expected ‘void * (***)(void **)’ but argument is of type ‘void ()(void *)’

编译报错:

在这里插入图片描述

原因:

大概意思就是pthread_create(&voiceThread,NULL,voice_Thread,NULL);要调用的函数的返回类型不一致,与函数期待的返回类型不一致。

看了半天才发现就是定义函数的时候,返回值类型忘记加*了⬇

报错的两个函数的返回类型都不是指针类型。

在这里插入图片描述

在这里插入图片描述

解决办法:

给那两个函数的返回类型定义为指针类型不就好了(void * 函数名(){}…)

在这里插入图片描述

编译运行

在这里插入图片描述
Nice!!!

3、树莓派串口一直读不到上位机发来的信息

报错信息:

没有报错信息…(程序员最怕的可能就是没有报错的BUG了吧)。

但是,奇怪的是,从键盘输入值后,再回车,神奇的情况出现了。。。。。

树莓派尽然把我从键盘输入的值当成了串口指令!!

原因

在写启动串口代码的时候,不能这么写

Control_Voice.c文件下

//错误代码:
int init_Voice(struct Command *cmd ,char *ip,char *port){
        int fd;
        if(fd = serialOpen("/dev/ttyAMA0",9600) == -1){		/*经过调试,这样在if语句里,赋给fd的值是0,是0啊!亲们!!!文档虽然说了除了不是-1,返回的就是正常值,(我信你个鬼!!!)但是在这里不就出现问题了~~~~*/
                exit(-1);
        }
        cmd->fd = fd;
        return fd;
}

改正

int fd;
fd = serialOpen("/dev/ttyAMA0",9600);	//酱紫才行
if(fd == -1){
	exit(-1);
}
cmd->fd = fd;
return fd;

4、

    if(fd = serialOpen("/dev/ttyAMA0",9600) == -1){		/*经过调试,这样在if语句里,赋给fd的值是0,是0啊!亲们!!!
    													文档虽然说了除了不是-1,返回的就是正常值,(我信你个鬼!!!)
    													但是在这里不就出现问题了~~~~*/
                exit(-1);
        }
        cmd->fd = fd;
        return fd;
}

改正

int fd;
fd = serialOpen("/dev/ttyAMA0",9600);	//酱紫才行
if(fd == -1){
	exit(-1);
}
cmd->fd = fd;
return fd;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值