嵌入式
文章平均质量分 78
qq_37659294
这个作者很懒,什么都没留下…
展开
-
详解C语言中volatile关键字
如果汇编指令修改了内存,但是GCC 本身却察觉不到,因为在输出部分没有描述,此时就需要在修改描述部分增加“memory”,告诉GCC 内存已经被修改,GCC 得知这个信息后,就会在这段指令之前,插入必要的指令将前面因为优化Cache 到寄存器中的变量值先写回内存,如果以后又要使用这些变量再重新读取。2)不要将变量缓存到寄存器,因为这段代码可能会用到内存变量,而这些内存变量会以不可预知的方式发生改变,因此GCC插入必要的代码先将缓存到寄存器的变量值写回内存,如果后面又访问这些变量,需要重新访问内存。转载 2023-05-03 19:56:28 · 178 阅读 · 0 评论 -
C语言volatile的作用及使用场景介绍
volatile的作用是很微妙的,它并不能替代synchronized,因此它无法提供同步的能力,它只能提供改变可见性的能力 (可见性:多个线程访问同一个变量时,这个变量被修改后,能被其他的线程看到。由于总是读写与主存,它的读写性能要低于普通的变量。正确使用的模式总结下来就是一个线程写,多个线程读。转载 2023-05-03 19:29:54 · 206 阅读 · 0 评论 -
IIC总线 和 SPI总线 的不同
spi 总线因为是全双工,因此是沿采样,具体要根据 CPHA 决定。spi 总线不同从设备读写时序差别比较大,因此必须根据具体的设备 datasheet 来实现读写,相对复杂一些。2、 iic 总线是多主机总线,通过 SDA 上的地址信息来锁定从设备。1、 iic 总线是半双工, 2 根线 SCL SDA。7、 iic 总线 和 spi 总线数据传输都是 MSB 在前, LSB 在后(串口是 LSB 在前);8、 iic 总线 和 spi 总线时钟都是由主设备产生,并且只在数据传输时发出时钟;转载 2023-05-02 22:02:38 · 418 阅读 · 0 评论 -
(NFS)mount.nfs: access denied by server while mounting localhost:/home/xuwq/minilinux/system
https://blog.csdn.net/xuwq2015/article/details/50147151?locationNum=9转载 2019-08-11 13:33:12 · 771 阅读 · 0 评论 -
引入宽字符error: converting to execution character set: Invalid or incomplete multibyte or wide character
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/qq_26093511/article/details/60593240交叉编译.c文件,遇到如下问题arm-linux-gcc -o show_lines show_lines.c -lfreetype -lmshow_lin...转载 2019-08-16 11:09:36 · 2796 阅读 · 0 评论 -
linux交叉编译时报错 libfreetype.so: file not recognized: File format not recognized
root@ubuntu:/home/linuxsystemcode/04th_print_info# arm-none-linux-gnueabi-gcc -finput-charset=GBK -o example1 example1.c -lfreetype -lm/usr/local/arm/arm-2009q3/bin/../arm-none-linux-gnueabi/libc/l...原创 2019-08-17 10:51:07 · 11599 阅读 · 0 评论 -
linux交叉编译时报错:file not recognized: File format not recognized
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/u011113596/article/details/80325081今天交叉编译sqlite3,make的时候报错:sqlite3-shell.o: file not recognized: File format not reco...转载 2019-08-17 10:52:04 · 4671 阅读 · 0 评论 -
arm-linux-gcc静态编译和动态编译的区别
很多教程会提到加上-static是静态编译,但对于新手来说没有用例子来说明可能不太好理解,今天我就介绍一下关于这方面知识的一个例子:最近在做一个关于freetype字体的东西,需要依赖freetype官方提供的库,我已经把电脑这边的环境配置好了,如下图,我分别用-static和不用-static编译出了两个可执行程序,用-static编译出来的文件明显大得多,因为它已经把该程序依赖的一些...原创 2019-08-17 14:28:18 · 2388 阅读 · 0 评论 -
从0到1写RT-Thread内核——线程定义及切换的实现
从0写RT-Thread内核之线程定义及切换的实现具体可以分为以下六步来实现一:分别定义线程栈、线程函数、线程控制块;ALIGN(RT_ALIGN_SIZE)//设置4字节对齐/* 定义线程栈 */rt_uint8_t rt_flag1_thread_stack[512];rt_uint8_t rt_flag2_thread_stack[512];/* 线程1 */void...原创 2019-09-03 20:27:50 · 559 阅读 · 0 评论 -
从0到1写RT-Thread内核——临界段的保护
临界段就是一段在执行的时候不能被中断的代码段,在RT-Thread里,临界段最常出现的就是对全局变量的操作(类似Linux下的锁)。RT-Thread对临界段的保护是直接把中断全部关了,NMI FAULT和硬FAULT除外。下图是3个关于中断屏蔽的寄存器,这里我们使用到的是PRIMASK寄存器。 下面是关于临界段屏蔽的例子 ,分别在开中断和关中断函数里添加MRS...原创 2019-09-05 19:52:07 · 187 阅读 · 0 评论 -
从0到1写RT-Thread内核——空闲线程与阻塞延时的实现
在之前写的另外一篇文章——<从0到1写RT-Thread内核——线程定义及切换的实现>中线程体内的延时使用的是软件延时,即还是让CPU空等来达到延时的效果。RTOS中的延时叫阻塞延时,即线程需要延时的时候,线程会放弃CPU的使用权,CPU可以去干其他的事情,当线程延时时间到,重新获取CPU使用权,线程继续运行,这样就充分利用了CPU的资源,而不是干等着。 ...原创 2019-09-08 17:30:00 · 1231 阅读 · 0 评论 -
从0到1写RT-Thread内核——支持多优先级
在本章之前,RT-Thread还没有支持多优先级,我们手动指定了第一个运行的线程,并在此之后三个线程(包括空闲线程)互相切换,在本章中我们加入优先级的功能,第一个运行的程序是就绪列表里优先级最高的程线程,线程的切换也是切换到已经就绪的线程中优先级最高的一个。 就绪列表实际上由线程就绪优先级组rt_thread_ready_priority_group和线程优先级表rt...原创 2019-09-14 21:42:49 · 649 阅读 · 0 评论 -
Linux串口阻塞与非阻塞
Linux串口编程的阻塞与否可以在open函数中设置,例如:打开时使用:fd = open(USAR1, O_RDWR | O_NOCTTY );//阻塞式读写fd = open("/dev/ttyAT2",O_RDWR|O_NOCTTY|O_NDELAY); //非阻塞读写除了用open函数之外还可以在open函数之后用fcntl函数来设置,代码如下:打开后使用fcn...原创 2019-09-29 10:26:26 · 2545 阅读 · 0 评论 -
树莓派设置静态IP的好处与坏处
网上后很多资源教初学者如何设置静态IP,但我觉得设置静态IP也有不好的地方: 首先,好处就是树莓派的IP不会变,例如你设置了无线连接方式的静态IP为192.168.1.110,那么无论你连接哪个路由器,或者连接同一个路由器(不论什么时间),你的IP都是192.168.1.110,这样我们每次远程登录的时候就不用查看我们树莓派被分配到的IP地址了 ...原创 2019-07-24 13:57:57 · 1858 阅读 · 0 评论 -
树莓派第一次开机自动连接WIFI(不用显示屏方法)
当我们把树莓派系统镜像烧录到SD卡之后,我们在windows看到的TF卡变成了空间很小的名为boot的盘,我们在此目录下新建一个名为wpa_supplicant.conf空白文件,并在其中加入以下代码:country=GBctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdevupdate_config=1network={ ss...原创 2019-07-24 13:44:14 · 11252 阅读 · 5 评论 -
僵死进程的产生以及解决办法
本文参考自:https://baike.baidu.com/item/%E5%83%B5%E5%B0%B8%E8%BF%9B%E7%A8%8B/1036577?fr=aladdin 一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一...原创 2019-07-16 22:04:08 · 422 阅读 · 0 评论 -
关于NOR FLASH地址左右移的问题
问题引入:不知道你会不会有这样的疑问:为什么在发送解锁命令时,我们不用右移一位,而发送扇区地址时却要右移一位(nor_cmd函数内部已经左移一位),这里先补充说明一下说明是cpu角度和nor角度:cpu角度: CPU访问的最小单元是byte ,在它眼里我们的NOR FLASH是2M * 8bitnor角度: 我们的NOR FLASH是16位宽的,最小单元是2byte,所以它认为它自己是1M ...原创 2019-05-02 21:57:14 · 807 阅读 · 3 评论 -
ubuntu下无法在根目录创建文件夹;permission denied 权限不足问题解决方法
https://blog.csdn.net/bigcabbagefy/article/details/79500090转载 2019-06-06 12:47:57 · 2819 阅读 · 1 评论 -
Makefile常见符号意思
Makefile里有许许多多的符号,对于新手而言如果没有经常使用,就很容易忘记,所以我把常见符号的意义写下,方便日后忘记查询。本文章会持续更新...1.$@:代表目标;$^代表所有依赖,$^代表第一个依赖。 eg:下图的$@代表目标名test,$^代表所有依赖,即test.c和seqlist.c,所以相当于gcc -O0 -g -Wall -o test te...原创 2019-06-19 22:25:49 · 2323 阅读 · 1 评论 -
在linux下利用ls命令进行模糊查找
如上图,我们当前路径下有三个文件,分别为helloworld.c以及helloworld和1.c,直接输入命令ls则显示所有文件,我们可以利用ls 加*的方向进行模糊查找。输入ls 目录名 形式的命令行,则是对该目录名下的文件全部进行显示,同样我们可以利用*进行模糊查找,如上图所示,输入ls hello*,则显示了当前目录下的两个以hello*为名的目录下的文件分别罗列出来。...原创 2019-06-16 09:58:08 · 15549 阅读 · 1 评论 -
fstat、stat和lstat 区别
ntfstat(intfiledes,structstat*buf);intstat(constchar*path,structstat*buf);intlstat(constchar*path,structstat*buf);一眼就能看出来fstat的第一个参数是和另外两个不一样的,fstat区别于另外两个系统调用的地方在于,fstat系统调用接受的...转载 2019-07-01 14:50:54 · 524 阅读 · 0 评论 -
Linux下串口通信详解
https://blog.csdn.net/u010783226/article/details/73369097转载 2019-06-23 20:27:52 · 123 阅读 · 0 评论 -
Linux的帧缓冲设备
Linux的帧缓冲设备帧缓冲(framebuffer)是 Linux 为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer 设备驱动来完成的。帧缓冲驱动的应用广泛,在 linux 的桌面系统中,Xwindow 服务器就是利用帧缓冲...转载 2019-07-08 14:40:34 · 268 阅读 · 0 评论 -
关于源文件用不同的编码方式编写,会导致执行结果不一样的现象及解决方法
如果我们编写以下程序,并分别另存为ANSI和UTF-8两种不同的编码方式保存,放到Linux下编译并运行如下图,两端相同的程序以不同的编码方式保存编译后的运行结果不一样,./ansi采用ANSI编码方式,会自动采用GBK方式来保存中文汉字“中”(“中”的GBK编码就是d6 d0,utf-8则是e4 b8 ad),那么我们有没有什么办法能够解决不同编码方式保存才来的执行结果不同的问题呢#inc...原创 2019-08-16 10:55:25 · 1438 阅读 · 0 评论 -
gcc编译缺少数学库
Linux下编译出现以下提示可以在编译的后面加上-lm,例如,arm-none-linux-gnueabi-gcc -o example1 example1.c -lm,意思就是添加数学库的意思,编译就能通过了example1.c:(.text+0x3e8): undefined reference to `cos'example1.c:(.text+0x42c): undefined ...原创 2019-07-13 09:19:19 · 998 阅读 · 0 评论 -
Linux编译程序时加-I指定头文件位置
Linux下编译出现以下错误,错误的原因是在/usr/local/arm/arm-2009q3/bin/../arm-none-linux-gnueabi/libc/usr/include/freetype/config/下找不到ftheader.h,而我到该目录下看,发现路径是这样的root@ubuntu:/usr/local/arm/arm-2009q3/arm-none-linux-gnue...原创 2019-07-13 10:14:09 · 1329 阅读 · 0 评论 -
Linux下没有包含头文件(不知是哪个)导致编译无法通过的解决心得
最近写程序的时候编译出错了,提示信息为:invalid use of undefined type 'fb_var_screeninfo'。显示根据英文知道是没有定义 'fb_var_screeninfo'这个类型,明显是缺少了某个头文件,但是缺少哪个头文件以及有什么又快又好的解决方法呢?首先,到我们的交叉编译工具链目录下,我使用的是arm-2009q3(cd /usr/local/arm/a...原创 2019-07-09 22:37:23 · 2248 阅读 · 0 评论 -
树莓派远程监控的实现
原文:https://blog.csdn.net/ayz123456/article/details/79252923http://shumeipai.nxez.com/2016/09/01/raspberry-pi-motion-cameras-for-remote-monitoring.htmlhttps://blog.csdn.net/wto882dim/article/details...转载 2019-07-14 14:32:55 · 463 阅读 · 0 评论 -
韦东山嵌入式第一期14课第004节_und异常模示程序示例_P笔记
本节课的第一个程序韦老师是想让大家见识一下未定义异常,而第二个程序是对第一个程序进行改进,防止在某些条件下执行不了,下面就来讲一下第2个程序改进了哪些地方并且有什么用。程序在此路径中:源码文档图片\源码\源码_20180321_添加传感器\014_und_exception_014_004 ...原创 2019-04-22 13:24:00 · 178 阅读 · 0 评论