- 博客(49)
- 收藏
- 关注
转载 2018-12-15 使用Jlink 调试RTThread(线程栈溢出的确定 / 实际线程栈使用情况的查看) 方法...
【题外话】 我第一次接触RTThread的时候是2014年,当时是本科毕业设计中需要使用到一款wifi模块进行无线视频传输,该模块提供的例程就是基于RTThread的。当时由于水平有限(就是水),看到这种长篇大论的代码还是有点头疼。后来硕士期间也接触过uCOS,至于RTThread一直到今年之前再未接触过。近期由于项目需要使用RTThread,我只得再次打开尘封的记忆,并从各种渠道...
2018-12-15 16:51:00 1680
转载 iptables实现网卡间端口转发
例如将本地接口IP 61.144.14.72 的3389端口 转发到 116.6.73.229的3389iptables -t nat -A PREROUTING -d 61.144.14.72 -p tcp --dport3389 -j DNAT --to-destination 116.6.73.229:3389iptables -t nat -A POSTROUT...
2018-01-10 16:38:00 754
转载 2017.9.29 ubuntu安装mysql服务
1、更新软件列表:sudo apt-get update2、安装mysql服务:sudo apt-get install mysql-client mysql-server3、安装过程中会提示输入密码,并重复输入。4、安装完成之后,登陆mysql,看是否安装成功:mysql -uroot -p5、确定安装成功之后,配置远程访问权限:5.1、修改mysql库的user表...
2017-09-29 16:23:00 146
转载 如何在树莓派上安装mjpeg-streamer(针对摄像头为UVC的)
1、安装依赖项:sudoapt-get installsubversion libv4l-dev libjpeg8-dev imagemagick fswebcam//sudo apt-get install libv4l-dev libjpeg8-dev imagemagick2、安装mjpg-streamersvn cohttps://svn.code.sf.n...
2016-09-25 22:11:00 217
转载 2016.9.22感想及收获
面试篇今天参加了科陆的面试,做了一下面试题,C语言部分几乎没有什么问题,但是软件类的题目不仅涉及到C语言、还有Java和C#,也还考到了数据库的知识。值得注意的面试题有:1、让程序在绝对地址0x100处执行。我写的答案是:(void(*0x100)(void))();结果在VS下编译通不过,网上有人说这样写:(void(*)(void)(0x100))();或者*(v...
2016-09-22 22:06:00 105
转载 GL-iNET路由器如何安装DDNS服务
1、先使用putty登录路由器luci,用户名为root,密码为登陆luci的web页面密码。2、更新luci,输入命令:opkg update3、安装luci-app-ddns和ddns-scripts 分别输入命令:opkg install luci-app-ddns 和 opkg install ddns-scripts4、安装完成之后,可以再服务-...
2016-08-03 23:40:00 878
转载 2016.7.5 记项目过程中犯的一个从未察觉的低级错误
今天在项目中遇到了一个很奇葩的问题,具体什么问题就不说了,找了一下午实在找不出来,百般无奈之时,看到了自己敲的一条不太顺眼的代码: if(0<i<31)心想这样写好像不好,于是将其改成if((i>0)&&...
2016-07-06 19:54:00 86
转载 C++课程笔记 Lesson 01
1、C++与C语言的关系:C++以C语言为基础,添加了面向对象的支持,同时进行了:类型加强、函数加强和异常处理。2、C++对C的加强2.1、C++更强调语言的实用性,所有的变量都可以在需要使用的时候进行定义。而在C语言中,变量都必须在作用域开始的位置定义。eg:在C++中,for循环可以这样写:1 for(int i = 0 ; i<10 ;i++)2 ...
2016-06-13 22:05:00 90
转载 关于Jlink在linux系统下连接错误的解决方法
今日在linux下连接Jlink发现连接不上,使用JlinkGDBServer时提示以下错误信息:Listening on TCP/IP port 2331 ERROR: Can not connect to J-Link.在网上看到有人遇到一样的问题:http://blog.csdn.net/niepangu/article/details/49835081我按照帖子上的方...
2016-04-07 21:14:00 833
转载 2016.4.6 我从内部看ARM课程笔记
1、关于ARM的一些名词:经常听到一些关于ARM的名词,什么ARM9,ARM11,Cortex-M4……让人有点摸不着头脑。今天听完课程之后,课程对这些名词进行了分类:a、芯片: S3C6410、2440、210b、ARM内核: Cortex-A8、ARM9、ARM11c、指令架构版本:ARMv7、ARMv6举个例子:S3C2440...
2016-04-06 17:01:00 105
转载 2016.4.6 链接器脚本文件的编写
1、链接器脚本文件的组成:基本构成:段:代码段.text 数据段.data bss段 .bss起始链接地址对齐变量代码段首文件2、实例文件:SECTIONS{ . = 0x0; //设置程序起始链接地址,=左右两边要空格 . = ALIGN(4);//,设置代码段四字节对齐,=左右两边要空格 .text...
2016-04-06 11:21:00 102
转载 2016.4.5 关于交叉编译工具链的使用及makefile的编写
1、常用的交叉编译工具使用实例:现有文件:源文件led.S及连接器脚本文件led.ldsi、arm-linux-gcc -g -c led.S -o led.o-g选项告诉编译器添加调试用的信息。-c告诉编译器只编译生成.o文件为止ii、arm-linux-ld -Tled.lds -o led.elf led.o-Tled.lds:链接器脚本文件选项iii、...
2016-04-05 17:06:00 187
转载 2016.4.5 关于arm-linux-gcc交叉编译工具链的安装
1、首先创建文件夹/home/S3-ARM/Part1/lesson1,然后利用samba或者vmware工具将ARM-tools复制到上述文件夹里面。2、解压ARM-tools .tar.gz到根目录:tar xvzf ARM_tools.tar.gz -C/然后tar xvzf arm-linux-gcc-4.3.2.tar.gz -C /这时候到目录:/usr/...
2016-04-05 15:22:00 113
转载 关于左移运算符的一点疑问及个人理解(不知道对不对)
今天有同学提问一个问题:int i = 1;//32biti=i<<32;之后i=?;按照之前的理解:32位的整型数据1的二进制为:0000 0000 0000 0000 0000 0000 0000 0001, 往左移一位将变成:0000 0000 0000 0000 0000 000...
2016-03-01 10:58:00 338
转载 2015-11-26 数组基础听课笔记
1、关于数组的大小:在C语言中声明一个数组时需要指定其大小(柔性数组除外),数组的大小有两种指定的方式:a、显式指定数组大小eg:int a[5]={1,2};即在声明数组的时候,就在数组的长度方括号[]内填写数组的长度,这种方式就是显式的指定数组大小的方式。b、隐式指定数组大小eg:int b[] ={1,2};即在声明数组时,不在方括号内填写数组长度,但在...
2015-11-26 17:03:00 125
转载 2015-11-26 个人关于sizeof(数组名)的误区
今天听课时老师讲到求数组所占内存大小时,应该这样写,eg:int a[10];那么sizeof(a)就是数组所占空间的大小。个人的理解是这样的:我们定义了数组a,那么数组名a就应该是一个指针常量,指向的是数组a的首地址,也就是说a是一个地址。那么sizeof(a)在32位机下,得到的结果应该是4,但是实际情况不是这样的。我在VS下编写以下代码进行测试:1 ...
2015-11-26 16:33:00 130
转载 2015-11-25 #pragma预处理分析听课笔记
1、#pragma是编译器指示字,用于指示编译器完成一些特定的动作。2、#pragma定义的很多指示字都是编译器和系统特有的。3、#pragma在不同的编译器之间是不可移植的。 3.1 预处理器将忽略它所不认识的#pragma指令 3.2两个不同的编译器可能会以两种不同的方式解释同一条#pragma指令,这是由编译器厂商决定的。4、一般用法: #prag...
2015-11-26 14:25:00 72
转载 2015-11-25 #error和#line的使用
1、#error用于生成一个编译错误消息,并立即停止编译。1.1 用法: #error message //注:message不用加引号1.2#error编译指示字用于自定义程序员特有的编译错误消息,类似的#warning用于程序员自定义编译警告消息,但不会停止编译。1.3使用实例: 1 #include<stdio.h> 2 3 void...
2015-11-25 15:29:00 98
转载 2015-11-5 宏定义使用分析听课笔记·
注:基础的宏定义注意事项及概念不再赘述。1、可以在预编译之后的.i文件中查看宏替换之后的代码。2、可以利用宏定义求数组求数组元素个数。#define DIM(array) (sizeof(array)/sizeof(*array))思考:这个功能可以利用函数来实现吗?int dim(int array[]){return sizeof(array)/size...
2015-11-05 10:51:00 100
转载 2015-11-5 关于编译的听课笔记
我们编写的C文件或H文件最后是如何生成我们的可执行文件的呢?1、首先,我们编写的C、H文件经过与处理器进行编译预处理,这也叫预编译。预编译做了哪些工作呢?a、将源文件中的所有注释用空格代替。b、将所有的#define删除,并且展开所有的宏定义。c、处理条件编译指令#if、#ifdef、#elif、#else、#endifd、处理#include,展开被包含文件。...
2015-11-05 10:14:00 79
转载 2015-10-29 韦东山OK6410 第一天课程笔记
1、PC和嵌入式Linux的启动方式:PC: BIOS ---->引导操作系统 ---->识别分区 ---->应用程序嵌入式LInux: bootloader ---->引导linux操作系统 ---->挂接文件系统 ---->启动应用由上述对比我们可以发...
2015-10-29 17:16:00 103
转载 2015-10-26 逻辑运算符使用分析
首先我们来看一段代码: 1 #include <stdio.h> 2 3 int main() 4 { 5 int i = 0; 6 int j = 0; 7 8 if( ++i > 0 || ++j > 0 ) 9 {10 printf("%d\n", i);...
2015-10-26 17:07:00 57
转载 2015-10-26 一些位运算符 课程笔记
1、&和|&表示按位与操作,|表示按位或操作。这里注意一点,这两种运算符满足交换律和结合律。交换律: a&b = b&a;结合律: a&(b&c) = (a&b)&c2、关于<< 和>>的注意点:2.1 左移运算是将运算数的二进制位左移。 规则:高位丢弃,低位补02...
2015-10-26 17:02:00 61
转载 2015-10-26 单引号和双引号 课程笔记
先看一段代码,如下: 1 int main() 2 { 3 char *p1 = 1; 4 char *p2 = '1'; 5 char *p3 = "1"; 6 7 printf("%s,%s,%s",p1,p2,p3); 8 printf('\n'); 9 printf("\n");10 11 return 0;12 }上...
2015-10-26 16:41:00 89
转载 2015-10-23 注释符、接续符'\'和转移符'\'
1 编译时对注释处理的规则:1.1 编译器会在编译过程中删除注释,但不是简单的删除,而是用空格代替。1.2 编译器认为用双引号括起来的内容都是字符串,双斜杠也不例外。1.3 /*...*/型注释是不能被嵌套的。2接续符'\':指示编译器行为的利器。2.1 编译器会将反斜杠剔除,跟在反斜杠后面的字符自动接到前一行。2.2 在接续单词时,反斜杠之后不能有空...
2015-10-23 17:08:00 267
转载 2015-10-23 enum和typedef关键字听课笔记
1 enum关键字1.1 enum定义的常量是真正意义上的常量,不同于用const定义的只读变量。它不是存储在内存之中的,因此我们不能通过指针来访问enum定义的常量的地址。1.2 关于用#define定义的常量和枚举常量的不同1.2.1 #define定义的常量只是简单地进行纯文本的替换,而枚举常量是真正意义上的常量。1.2.2 #define定义的常量是无法被调试的,...
2015-10-23 16:48:00 78
转载 2015-10-21 算法的时间复杂度和空间复杂度课后总结
I 算法效率的度量有两种主要的方式:1、事后统计法:这种方法可行,但不是一个好的方法。该方法有两个缺陷:一是要想对设计的算法的运行性能进行评测,必须先依据算法编制相应的程序并实际运行;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优势。2、事前估计法:在编写程序前,依据统计方法对算法进行估算。一个用高级语言编写的程序在计算机上运行时所消耗的时间...
2015-10-21 17:00:00 67
转载 2015-10-20 关于struct和union
1、结构体:1.1、思考题:空结构体占用多大内存空间?ANS:不同的编译器,这个结果是不定的。在GCC下,空结构体占用0个字节的空间。在G++编译器下,空结构体占用1个字节的空间。1.2、一个新的概念----柔性数组柔性数组:数组大小待定的数组。C语言中结构体的最后一个元素可以为一个大小未知的数组。于是可以利用该特性来产生柔性数组:struct _soft_arr...
2015-10-20 17:12:00 101
转载 2015-10-20 关于const和volatile关键字
今天听的课的内容讲到了const和volatile关键字,笔记整理如下:1、const关键字:1.1、在C语言中,const修饰的变量是只读的,其本质还是变量。当我们在C代码中试图对一个用const修饰的变量进行写操作时,编译器的错误提示中有以下关键字:...read-only variable...,这也证明了我上述陈述的内容。1.2、const修饰的变量会占用内存空间...
2015-10-20 16:18:00 114
转载 2015.10.19 关于extern关键字
今天听国嵌的C语言课时,老师提到了extern关键字,这里我自己总结一下:extern关键字有两层意思:1、用于声明外部定义的变量和函数这种是最常见的使用方法,我简单介绍一下:例如在tst2.c文件中有以下变量和函数:int a,b;int add(int x, int y){return x+y;}这个时候我有一个tst1....
2015-10-19 16:17:00 59
转载 老错新犯——关于char *str=“Hello”; str[0] = 'H';
这个问题在昨天的随笔之中还提到过了,再次摘录一下:采用指针存储字符串,其实质就是把字符串的首地值附给基类型为char的指针变量,从而可以从字符串首元素开始对字符串进行操作,这里面也存在一点问题. 用这个类子给大家解释解释. int main() { char *p="hello wor...
2015-09-22 10:50:00 496
转载 一道Realtek的C笔试题
上周五参加Realtek的笔试题,有一道选择题,大概是这样的:const char a1[] = "abc";const char a2[] = "abc";const char *p1 = "abc";const char *p2 = "abc";A、a1和a2一样,p1和p2不一样;B、a1和a2不一样,p1和p2一样;C、a1和a2不一样,p...
2015-09-21 11:06:00 121
转载 关于#define f(a,b) a##b
以下来自网络:#define Conn(x,y) x##y#define ToChar(x) #@x#define ToString(x) #xx##y表示什么?表示x连接y,举例说:int n = Conn(123,456); 结果就是n=123456;char* str = Conn("asdf", "adf")结果就是 str = "asdfadf";怎么样,很神奇吧再来看#@x,...
2015-09-21 09:47:00 189
转载 2015.9.10关于链表中结构体指针的错误
昨天用结构体指针写了一个双链表的程序,编译环境是VC6.0,之前写单链表的时候也是用的这个编译器,但是昨天出了一个让我很费解的问题,代码如下:/*********************************************************** C语言实现双链表*文件名:list.c*作者:Mr Wan*编写时间...
2015-09-10 09:15:00 234
转载 自己写的一个基于C的单向链表
/*********************************************************** 链表的基本操作(C语言)**文件:list.c*作者:Mr Wan*描述:实现链表的初始化、添加、删除等等*编写时间:2015.9.7**修改日期:2015.9.9*修改人:Mr Wan*修改内容:将之前创...
2015-09-09 15:27:00 60
转载 暑假工作日志——关于void *
关于“void *”经常在代码中会看到类似这样的定义:void Task1 (void *pdata){while(1){……}}这是一个uCOSII的任务代码,我们可以看到该任务函数有入口参数”void *pdata”,从字面上看,我们在这里声明了一个void *的指针变量pdata,它所指向的内容为void?这就让人有点不能理解了,那到底void ...
2015-09-08 15:28:00 113
转载 暑假工作日志——关于字符数组和字符指针
1、字符数组:char str[]=”Hello~World!”;2、字符指针:char *str=”Hello~World!”;1中定义了一个数组,数组里面存放的是字符串“Hello~World!”;2中定义了一个char *的指针,将“Hello~World!”赋给该指针。那么问题来了,既然2中左边我们定义的是一个指针,而在等式右边是一个字符串,能将字符串...
2015-09-08 15:27:00 73
转载 暑假工作日志——关于static
关于static关键字作用的理解1、 修饰变量,变量分为全局变量和局部变量,但他们都存在于内存的静态区a、 静态全局变量,静态全局变量的作用域是变量被定义的文件中,其他文件即使使用extern也无法使用它,准确地说它的作用域是从定义之处开始到文件结尾处结束,在定义之前的代码也没法使用它,要想使用它只能使用关键字externb、 静态局部变量,在函数体里面定义的静态局部变...
2015-09-08 15:26:00 59
转载 暑假工作日志——一些变量与“零值”的比较
1、bool型变量如何与零值进行比较?bool bTestFlag = FALSE;(想想为什么bool型变量初始化为FALSE)a、 if(bTestFlag==0) /if(bTestFlag==1)b、 if(bTestFlag==TRUE)/if(bTestFlag==FALSE)c、 if(bTestFlag)/if(!bTestFlag)...
2015-09-08 15:25:00 74
转载 暑假工作日志——再谈函数用指针返回数组
数组可以作为函数的输入参数,这个很简单,例如:void fun(int a[],int i);上述函数原型中第一个输入参数就是一个int a[],是一个整型的数组。那么一个函数能不能返回一个数组,怎么返回一个数组呢?比如,我们在一个函数InsertData里面要向一个输入的空数组a[]中插入变量,然后将其返回,怎么办呢?我们知道数组在内存中也是有地址的,数组也是有指针的...
2015-09-08 15:23:00 110
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人