一些C代码 1 #include <stdio.h> 2 3 void foo(void) 4 { 5 unsigned int a = 6; 6 int b = -20; 7 (a+b>6)?puts(">6"):puts("<6"); 8 } 9 10 int main(void)11 {...
数组名a作为左值和右值的区别 简单而言,出现在赋值符“=”右边的就是右值,出现在赋值符“=”左边的就是左值。 比如,x=y。 左值:在这个上下文环境中,编译器认为x的含义是x所代表的地址。这个地址只有编译器知道,在编译的时候确定,编译器在一个特定的区域保存这个地址,我们完全不必考虑这个地址保存在哪里。 右值:在这个上下文环境中,编译器任务y的含义是y所代表的地址里面的内容。这个内容是什么,只有到...
如何将数值存储到指定的内存地址 假设现在需要往内存地址0x12ff7c上存入一个整型数0x100,那么怎样才能做到呢? 我们知道可以通过一个指针向其指向的内存地址写入数据,那么这里的内存地址0x12ff7c其本质不就是一个指针嘛,所以我们可以用下面的方法:int *p = (int *)0x12ff7c;*p = 0x100; 需要注意的是,将地址0x12ff7c赋值给指针变量p的...
数组的内存布局 先看下面的例子:int a[5]; 所有人定明白这里定义了一个数组,其包含了5个int型的数据。我们可以用 a[0]、a[1]等来访问数组里面的每一个元素,那么这些元素的名字就是a[0]、a[1]...吗? 如图所示,当我们定义一个数组a时,编译器根据指定的元素个数和元素类型分配确定大小(元素类型大小*元素个数)的一块内存,并把这块内存的名字命名为a。名字...
int *p=NULL 和 *p=NULL有什么区别 很多初学者搜无法分清这两者之间的区别。先看下面的代码:int *p = NULL; 这时候我们可以通过调试器查看p的值为0x00000000。这句代码的意思是:定义一个指针变量p,其指向的内存里面保存的是int类型的数据;在定义变量p的同时,把p的值设置为0x00000000,而不是把*p的值设置为0x00000000。这个过程叫做初始化,是在编译的时候进行的。...
&a[0] 和 &a 的区别 这里 &a[0] 和 &a 到底是什么区别呢? a[0]是一个元素,a是整个数组,虽然&a[0] 和 &a 的值一样,但其意义不一样。前者是数组首元素的首地址,而后者数数组的首地址。 举个例子:湖南的省政府在长沙,而长沙的市政府也在长沙。两个政府都在长沙,但其代表的意义完全不同。转载于:https://www.cnblogs.com/d...
指针的内存布局 指针的内存布局 先看下面的例子int *p; 大家都知道这是定义了一个指针p,但是p到底是什么东西呢?还记得第1章里说过“任何数据类型我们都可以把它当成一个模子”吗?p,毫无疑问,是某个模子“咔”出来的。我们也讨论过,任何模子都必须有特定的大小,这样才能“咔咔咔”。那“咔”出p这个模子到底是什么样子呢?它占多大的空间呢?现在用sizeof测试一下(32位系...
“*”与防盗门钥匙 指针变量p前的“*”号作用? 这里这个“*”号怎么理解呢?举个例子:当你回到家门口时,你想进屋第1件事就是拿出钥匙来开锁,试想防盗门的锁芯是不是很像这个“*”号?你要进屋必须要用钥匙,试想防盗门的锁芯是不是很像这个“*”号?你要进入必须要用钥匙,那你去读/写一块内存是不是也要一把钥匙呢?这个“*”号是不是就是我们最好的钥匙?使用指针的时候,没有它,你是不可能读/写某块内存的。...
进程间通信 进程间通信 在进程控制开发中,读者已经学会了如何创建进程以及如何对进程进行基本的控制,这些都只是停留在父子进程之间的控制,本章将样学习不同的进程间进行通信的方法。通过本章学习,读者将会掌握以下内容:掌握Linux中管道的基本概念掌握Linux中管道的创建掌握Linux中管道的读写掌握Linux中有名管道的创建读写方法掌握Linux中消息队列的处理掌握...
进程控制开发 进程控制开发 文件是linux中最常见最基础的操作对象,而进程则是系统调度的单位。Linux下进程概述 进程相关的基本概念 进程的定义 进程是一个独立的可调度的活动;进程是一个抽象实体,当执行某个任务是将要分配和释放各种资源;进程是可以并行执行的的计算部分。 以上进程的概念都不相同,但其本质是一样的。它指出了进程是一个程序的一次执行的过程。它和程序是由本...
ubuntu1604中安装arm-linux-gcc 1. 在 /usr/local中新建文件夹armsudo mkdir /usr/local/arm2. 改变arm文件夹属性sudo chmod 777 /usr/local/arm3. 将安装包复制到 arm目录下cp arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 /usr/local/arm4. ...
FreeRTOS_软件定时器 FreeRTOS 软件定时器实验创建2个任务,start_task、timercontrol_task。start_stask:创建timercontrol_task任务;创建周期定时器AutoReloadTimer 和单次定时器OneShotTimer;创建二值信号量BinarySemaphore。BinarySemaphore:接收串口命名,在中断中释放...
ubuntu 使用apt命令时报错 E: Could not get lock /var/lib/dpkg/lock - open... 问题描述:刚刚安装好Ubuntu16.04。使用apt命令时,提示报错信息:abc@pc:~$ sudo apt-get install openssh-serverE: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)E: Unable to ...
FreeRTOS_事件标志组 FreeRTOS事件标志组事件标志组简介1. 事件位(事件标志)事件位用于表明某个事件是否发生,事件位通常用作事件标志,比如下面的几个例子: 当收到一条消息并且把这条消息处理掉以后就可以将某个位(标志)置1,当队列中没有消息需要处理的时候就可以将这个位(标志)置0。 当把队列中的消息通过网络发送输出以后就可以将某个位(标志)置1,当没有数据需要从网络发送出去的话就...
FreeRTOS_信号量 FreeRTOS信号量信号量是操作系统总重要的一部分,信号量一般用来进行资源管理和任务同步,FreeRTOS中信号量又分为二值信号量、计数型信号量、互斥信号量和递归互斥信号量。不同的信号量其应用场景不同,但是有些场景是可以互换着使用的。信号量简介信号量常常用于控制对共享资源的访问和任务同步。举一个很常见的例子,某个停车场有100个停车位,这100个停车位大家都可以使用,...
FreeRTOS笔记 任务的创建和删除(静态方法)任务创建后要开启调度器。FreeRTOSConfig.h1. 改宏 使能静态创建函数。 会出现,有两个函数未定义。Cortex-M中断管理(上)NVIC:嵌套向量中断控制器。与中断有关的寄存器都在NVIC和SCB中Cortex-M中断管理(下)中断优先级设置IP[240U]中断向量表中定义具体对应关系...
DES DES全称为Data Encryption Standard,即数据加密标准,是一种使用秘钥加密的块算法。DES算法入口参数: DES算法的入口参数有三个:Key、Data、Mode。其中Key为7个字节共56位,是DES算法的工作秘钥;Data为8个字节64位,是要被加密或解密的数据;Mode为DES的工作方式,有两种:加密或解密。DES基本原则:DES设计中使...
第008课_第1个ARM落版程序及引申 form:第008课_第1个ARM裸板程序及引申第001节_辅线1_硬件知识_LED原理图当我们学习C语言的时候,我们会写个Hello程序。那当我们下ARM程序,也该有一个简单的程序引领我们入门,这个程序就是点亮LED。我们怎样去点亮一个LED呢?分为三步: 1. 看原理图,确定控制LED的引脚; 2. 看主芯片的芯片手册,确定如何控制这个引脚 3. 写程序...
第4章 裸机系统和多任务系统 在真正动手写RTOS之前,我们先来讲解下单片机编程中的裸机系统和多任务系统的区别。4.1 裸机系统裸机系统通常分为轮询系统和前后台系统,有关这两者的具体实现方式请看下面的讲解。4.1.1 轮询系统轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序完成各种事情,大概的伪代码具体见代码清单 4-1。轮询系统是一种非常简单的软件结构,...
第010课_掌握ARM芯片时钟体系 from:第010课_掌握ARM芯片时钟体系第001节_S3C2440时钟体系结构S3C2440是System On Chip(SOC),在芯片省不仅仅有CPU,还有一堆外设。至于有哪些外设,可以查看参考手册。在S3C2440参考手册的第一章PRODUCT OVERVOEW里面有个BLOCK DIAGRAM图:可以把该图分为上中下三块,上面的是誉CPU紧密...