
c
echoSuccess
这个作者很懒,什么都没留下…
展开
-
记录一下nodemcu次品固件下载不进去的发现过程
正常情况下nodemcu的下载模式gpio0拉低,也就是板子上的flash按键按下不丢,然后去按下reset按键。然后esp8266 download tool就会提示在下载。但是我的板子连续操作,各种操作操作操作操作后,还是下载不进去。但是有个现象是板子的AT指令,我通过串口助手发过去,板子可以正常的回复,初步判断板子里边的固件没问题,有些下载不进去的原因是程序跑乱了,需要清除固件也就是下载一个...原创 2020-03-18 16:30:27 · 1163 阅读 · 0 评论 -
c语言的一级指针和二级指针作为函数参数,链表,malloc中的分配等等总结
主要内容:1、一级指针和二级指针2、函数指针传递的例子3、什么时候需要传递二级指针?4、二级指针在链表中的使用1、一级指针和二级指针一级指针:即我们一般说的指针,就是内存地址;二级指针:指向指针的指针,就是地址的地址;如:int a=1;int *p=&a; // p为a变量的地址,通过*p可以得到a的值int **q=&p; //...转载 2018-08-25 20:58:57 · 1808 阅读 · 2 评论 -
C语言不带头结点链表创建,删除,插入总结
一、创建链表1、第一种创建链表的方法,注意对比和第二种创建链表的细微之处,typedef struct mynode{ int num; float score; struct mynode * next;}Node,* Pnode;Pnode createList(){ Pnode head,currNode,ta...原创 2018-08-25 22:08:11 · 3495 阅读 · 0 评论 -
C语言动态数组
C语言数组目前我知道两种动态数组和环形buffer,先写一个动态数组,等下写个环形bufer。以下是代码和实验现象#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct damicArray{ int size;//使用量 int capacity; i...原创 2018-08-25 23:26:11 · 974 阅读 · 0 评论 -
C语言逗号运算符 笔试题
c语言提供一种特殊的运算符,逗号运算符,优先级别最低,它将两式联接起来,如:(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,如:(3+5,6+8)的值是14,(a=3*5,a*4)的值是60,原因在于赋值运算优先级高于逗号表达式。逗号表达式的要领:1.从左到右逐个计算;2.逗号表达式作为一个整体,它的值为最后一个表达式的值;3. 逗...原创 2018-09-26 20:41:29 · 2412 阅读 · 0 评论 -
C语言 > 号运算符的优先级,笔试题
#include <stdio.h>int main(){ int a=1,b=2,c=2,t=0,x=0; while(a<b<c) { t=a;a=b;b=t;c--; } printf("%d,%d,%d\n",a,b,c);} 输出1,2,0<具有从左向右结合的特性,所...原创 2018-09-26 20:43:30 · 1840 阅读 · 0 评论 -
Switch中的default陷阱
当年学C语言switch开关语句的时候,很多人会告诉你它是这么用的: switch(表达式){ case常量表达式1: 语句1;break; case常量表达式2: 语句2;break; … case常量表达式n: 语句n;break; default: 语句n+1;break; 其语义是...原创 2018-09-26 21:04:27 · 1037 阅读 · 0 评论 -
xenomai任务切换测试程序
最近在做igh主站的毕设,由于实时性的原因,所以用到了xenomai,下边记录一下任务切换的测试程序#include <errno.h>#include <signal.h>#include <string.h>#include <sys/resource.h>#include <unistd.h>#include <...原创 2019-01-12 18:41:58 · 1325 阅读 · 0 评论 -
xenomai queue测试程序
同样的,记录下xenomai的queue通信的测试程序。程序的现象是,程序运行以后,从命令行中输入的数据,会通过queue发送到另一个任务,并打印出来。#include <errno.h>#include <signal.h>#include <string.h>#include <sys/resource.h>#include <...原创 2019-01-12 18:44:32 · 794 阅读 · 0 评论 -
stm32驱动sd卡问题记录
问题记录:将程序从51单片机移植到stm32以后就一直出现一个问题,单片机不能以很高的速度驱动sd卡,导致数据采集的速度一直跟不上。但是在测试的过程中发现程序在debug下是可以正常驱动的,试图通过对比正常启动驱动和在debug下的区别来发现原因。发现debug下单片机的复位是通过软件复位来完成的,硬件直接启动通过外部的阻容复位。后来就一直纠结硬件的复位问题,后来又发现启动后通过手动复位sd卡驱动...原创 2019-06-01 11:29:28 · 1606 阅读 · 1 评论 -
数据结构之单向链表代码。
记录单向链表的插入,打印,删除等操作代码,下边是代码#include <stdio.h>#include <stdlib.h>typedef struct Listnode{ void * data;//数据域可以是任意类型,比如下文的结构体 struct Listnode * next;}listnode;typedef struct{ listn...原创 2018-08-25 17:33:11 · 242 阅读 · 0 评论 -
再记录一下删除链表的倒数第N个元素
之前一直没关注过数据结构,最近猛刷一下。删除倒数第N个元素,也是用两个指针,一个是先走,走了N-1次,因为刚开始指向head,这一次就不用走了。然后再然back指针走,这样front指针走到结尾的时候(指向最后的指针的时候)那么back就是指向要删除的指针了,又因为删除指针,要知道这个指针的前一个指针,所以要用一个指针,记录back的前一个指针。当然还要判断倒数第N个链表节点是否存在。下边是代...原创 2018-08-27 15:30:23 · 167 阅读 · 0 评论 -
单片机编程中的野指针以及空指针的使用
什么是野指针?就是指向内存地址不确定的指针,从“野”字可以理解。什么情况下出现野指针?我们知道,没有初始化的全局变量和static修饰的局部变量都会被编译器默认初始化为0,所以这些指针变量的地址是确定的0,其实也是NULL,所以他们不是野指针。未赋值的局部指针变量的值是随机分配的,为野指针,例如//错误做法void test(){ char * p;//此时的p就是野...原创 2018-08-12 14:37:05 · 1957 阅读 · 0 评论 -
对stm32内存理解,查看以及面试题的一些总结(一)
基础知识储备1、keil中如何调用出map文件,以及map文件的作用我是拿正点原子的标准工程来使用分析。如何获得map文件,双击工程名即可得到map文件。2、map文件包含哪些东西1.Section CrossReferences:模块、段(入口)交叉引用;通俗一点就是函数之间互相调用的关系。2.Removing Unused inputsections from ...原创 2018-08-12 19:39:57 · 4745 阅读 · 0 评论 -
对stm32内存理解,查看以及面试题的一些总结(二)
当然这个图对于stm32的地址顺序是不对的,stm32 text在0x0800 0000 开始的,sram在0x02000 0000开始的,但是init data ,bss,heap和stack的顺序是对的,内存中就是这样排列的。首先看这个图程序由下边几部分构成的,bss,initial data ,code,heap,stack本来想记录下bss和initial的区别,但是我在stm...原创 2018-08-12 20:49:57 · 5817 阅读 · 1 评论 -
浅谈可重入函数与不可重入函数
在实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果有一个函数不幸被设计成为这样:那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。这样的函数是不安全的函数,也叫不可重入函数。相反,肯定有一个安全的函数,这个安全的函数又叫可重入函数。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。一个可...转载 2018-08-16 20:55:25 · 18480 阅读 · 1 评论 -
环形buffer C语言简单实现
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct circlebuffer{ int size;//用于判断环形buffer是否是满的 int wroffset; int rdoffser; char * buf; int buflen;}circl...原创 2018-08-26 19:09:05 · 4401 阅读 · 1 评论 -
C链表是否有环,以及环的位置
node * ifCircle(node *head ){ node * fast=head,*slow=head; node * findInNode1,node *findInNode2; //为什么这里以fast!=NULL 和fast->next!=NULL //因为fast跑到快,所以这里以fast作为判断条件 //因为下边有fast->next->nex...原创 2018-08-26 20:42:29 · 26727 阅读 · 0 评论 -
打印错误信息的宏定义
#ifndef __errmacros_h__#define __errmacros_h__#include <errno.h>#ifdef DEBUG#define DEBUG_PRINT(...) \ do { \ printf("In ...原创 2018-08-17 17:27:10 · 2552 阅读 · 0 评论 -
记录一下,C链表的反转
给自己复习使用,如果谁不幸搜到,请无视。如果忘记代码思路的时候,可以再推演一下图中的过程,需要三个指针,三个指针紧邻三个元素,每一次循环结束newfirst指向新链表的第一个元素,oldFirst指向旧链表的第一个,oldFirstNext指向旧链表的第一个的下一个。图中p ,q,r分别是上边说的三个指针。 代码实现:list * ReverseList(list * head)...原创 2018-08-27 11:58:46 · 262 阅读 · 0 评论 -
epoll中epoll_data_t 中fd和ptr的用法
文章是网上内容总结,为了自己下次好找,所以写到自己博客里边了。fd存放文件描述符,所以我们一般直接struct epoll_event event;event.events=EPOLLIN; event.data.fd = 0;//监听标准输入 epoll_data_t中的ptr怎么用呢?是给用户自由使用的。epoll 不关心里面的内容。用户可以用 epoll_data 这个 u...原创 2018-08-20 10:45:58 · 12978 阅读 · 4 评论 -
linux下c创建僵尸进程、查看僵尸进程、杀死僵尸进程
僵尸进程(Zombie process)通俗来说指那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸。也就是说父进程没有结束,但是子进程结束了,父进程没死,没办法给子进程收尸,真的是只有父进程死了才能收尸,哈哈,同时也没有显示的调用wait/waitpid给其子进程收尸。当然,父进程提前死亡,子进程会交给init进程,所以收尸的问题就交给init进程了。百度百科的僵尸进程说的很好,可...原创 2018-07-26 15:41:41 · 27970 阅读 · 2 评论