树莓派篇
1、系统盘不足导致无法安装东西
显示树莓派磁盘占用量
df -h
打开控制终端界面
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、串口登录不显示信息的问题
-
HDMI启动树莓派
-
打开terminal串口
输入: cat /proc/cmdline
如果不是serial=ttyAMA0,115200
就说明问题出在此处(没有配置正确)。
-
查看cmdline.txt配置文件
cat /boot/cmdline.txt ls -a /dev/ttyAMA0 #查看ttyAMA0
-
覆盖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
-
修改cmdline.txt文件
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
-
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;