嵌入式驱动工程师培训笔记(三)

一:系统中内存的结构


4g 起始地址为bfffffff


3g 起始地址为7fffffff


2g 起始地址为3fffffff


1g 起始地址为00000000

上图所示,虚拟内存为4g,操作系统规定应用程序只能在前3g ,后面1g是操作系统使用。涉及到内核编程时使用。

二:指针和数组介绍:

     指针需要了解的是 指针的类型  指针所指向的类型 指针的值或者说是指针所指向的内存区,还有指针本身所占据的内存区

    & 取地址符号 , * 解地址。

    数组名为数组的首地址。

三:C数据类型

  1.基本数据类型  int char long  ...

  2.结合   [ ]  * 不能单独使用

  3.自定义: struct  union ...

四 :上课练习编程题目:

1.

#include<stdio.h>

int main()
{
        int i = 10;
        int *p = &i;
        int** k = &p;
        printf("i 的地址为%p \n",&i);
        printf("i 的地址的值为%d \n",*(&i));

        printf("i 的地址为%p \n",p);
        printf("i 的地址的值为%d \n",*p);
        printf("p 的地址为%p \n ",&p);
        printf(" p 的地址里的值为%p\n",*(&p));
        printf(" p 的地址里的值为%p\n",*k);
        printf("k 的地址为i%p\n",&k);
}

通过上面的程序 ,了解&和*的功能。   分析 可知  p是指针变量 , 用来存放i的地址。p本身也占据内存 。

2.

#include<stdio.h>

int hello(int *p)
{
        printf("*p is %d\n",*p);
        *p = 100;

}

int main()
{
        int i = 10;
        hello(&i);
        printf("i is %d\n",i);

}
~ 

子函数使用指针变量参数

在子函数中,使用传指针变量来改变主函数中的值。

3.

#include<stdio.h>

int swap(int *a,int *b);
int swap2(int *a ,int *b);
int swap3(int *a,int *b);
int main()
{
        int a = 5;
        int b = 6;
        swap(&a,&b);
        printf("a=%d,b=%d\n",a,b);
        swap2(&a,&b);
        printf("a=%d,b=%d\n",a,b);
        swap3(&a,&b);
        printf("a=%d,b=%d\n",a,b);

}
int swap(int *a, int *b)
{

        int temp=0 ;
        temp = *a;
      *a = *b;
        *b = temp;

}
int swap2(int *a ,int *b)
{
        *a = *a + *b;
        *b = *a -*b;
        *a = *a - *b;

}
int swap3(int *a ,int *b )
{
        *a = *a ^ *b;
        *b = *a ^ *b;
        *a = *a  ^ *b;

}

使用子函数交换值

交换两个数的值有三种方式,使用中间变量,使用加减 ,使用位运算,要注意的是,使用加减时要注意数值溢出

4.

#include<stdio.h>

int main()
{
        int i = 654;
        printf("%d", printf("%d",printf("%d",i)));

}

遇到无从下手时,可以查看函数的手册   通过 man 3 printf  查看可知 ,printf返回的是输出的字符个数(\o 不算)

所以最后输出的结果是 65431

5 .给定一个数值 判断是一年中的几月几日 忽略闰年

#include<stdio.h>
int showmd(int n);

int main()
{
        int mouth[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
        int m = 12;
        int d = 31;
        int days = 0;

        int i ;

        for(i=0;i<m-1;i++)
        {
                days += *(mouth+i);
        }

        printf("days is %d\n",days+d);

        showmd(days+d);
}
int showmd(int n)
{
        int i;
        int j;
        int mouth[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
        int days = 0;
        for(i=0;i<12;i++)
        {
                days += *(mouth+ i);
                if(days >= n)
                        {
                                j = days -n ;
                                printf("月份为%d,日期为%d\n",i+1,*(mouth+i)-j);
                                break;
                        }
        }

}

"test.c" 43L, 547C                                            1,1           Top

判断年月

6.

#include<stdio.h>

int main()
{
        int n;
        int i;
        for(i=0;i<120;i++)
        {
                if(i%7==0)
                {
                        if((i%2==1)&&(i%3==2)&&(i%4==3)&&(i%5==4)&&(i%6==5))
                                printf("%d\n",i);
                }
        }

}
~  

爱因斯坦阶梯数

7.

#include<stdio.h>

int main()
{
        int i,j,sum;
        for(i=2;i<1000;i++)
        {
                sum = 0;
                for(j=1;j<i;j++)
                        if(i%j == 0)
                                sum +=j;
                        if(sum == i)
                                printf("完全数为%d\n",i);

        }

}

完全数

时间: 2024-07-30 05:03:14

嵌入式驱动工程师培训笔记(三)的相关文章

嵌入式驱动工程师培训笔记(二)

一:c语言代码规范 1.预处理代码和主函数代码中间要空一行. 2.分配内存和处理中要空一行. 3.写代码时要注意缩进.善于使用tab键. 二: 冯诺伊曼结构介绍 由五个组成: 运算器 ,控制器 ,存储器 ,输入设备 ,输出设备 . 其中存储器指的是内存,而不是硬盘.所以cpu要处理的数据都要经过内存. 三:c语言的核心 :内存图 对于嵌入式开发,c语言更多是对内存进行操作.所以对于内存的理解就非常重要了.编写程序要学会画内存图,明确数据或代码在内存中是如何分配的. 我们操作的是虚拟内存恒为 4g

嵌入式驱动工程师培训笔记(一)

一:Linux的安装(双系统安装) 1.使用cd安装rethat6.3 2.使用U盘安装rethat6.3 二:Linux基础命令 1. ls  查看指定目录下的文件   主要参数: -l 查看全部信息 -la参看隐藏信息 2.cd 切换目录    .表示当前目录  .. 表示上一层目录 3.pwd查看当前目录 4.mkdir创建目录 -r递归创建 5. fdisk磁盘操作 -l表示参看存在的磁盘 6.mount  umount 挂载和卸载   -o loop -t iso9660挂载iso镜像

零基础嵌入式Linux开发工程师培训视频

零基础嵌入式Linux开发工程师高端培训(ARM实战.系统移植.驱动开发.网络电子书开发)适合人群:初级课时数量:336课时用到技术:ARM实战.系统移植.驱动开发涉及项目:网络电子书开发.案例咨询qq:1840215592 课程大纲:C语言基础篇:实用嵌入式C Linux程序设计第一章 嵌入式开发基础及功能演示第二章 C语言基础第三章 C语言中的循环第四章 数组和字符串第五章 函数和指针 Linux应用篇:嵌入式Linux应用程序开发第一部分:嵌入式软硬件平台概述第二部分:嵌入式linux系统

老男孩培训视频听课笔记三(在51cto上听的)

SSH 连接Linux工具CRT SSH概念: 现在有两个版本的SSH1/SSH2,建议选择SSH2 查看服务端启动情况:$netstat -lntup | grep 22 自己加的:现在CRT工具很多:crt xshell putty ,现在我使用的是xshell           另外在在centos系统里可以安装lrzsz的软件包,可以实现在crt里利用rz/sz上传/下载小文件,大文件容易出错           CRT连接经常出现的问题:              ·超时问题:利用p

嵌入式驱动学习笔记

驱动学习笔记 输入子系统概念介绍 嵌入式驱动学习笔记,布布扣,bubuko.com

驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识

驱动开发读书笔记. 0.06  嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB video class 或USB video device class.是Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准,目前已成为USB org标准之一. UVC linux driver: UVC linux 驱动 需要在编译内核的时候选上 配置内核 Device

Linux培训薪资过万是真事 星创客为嵌入式高端培训树标杆

10月26日,是华清远见星创客嵌入式精英训练营首期班结业后的第15个工作日,虽然目前的学员就业成果已经超出了训练营老师们的预期,但就业工作仍然在继续进行着没有停止. 从训练营老师方面得出的统计数据,截至首期班结业后的第15个工作日,学员就业率已经完成86%,选择在京就业学员的平均月薪达11750,最高薪资为13500,选择回外地发展的学员薪水也大都在当地同行业薪酬水平之上.学员就业的行业也涉猎广泛,包括军工.信息安全.智能医疗.智能体育.云计算.汽车电子.物联网.视觉识别等等,基本上覆盖了目前嵌

Linux设备驱动核心理论(三)

10.中断与时钟 10.1 中断与定时器 所谓中断是指CPU在执行程序的过程中,出现了某些突发事件急待处理,CPU必须暂停执行当前程序,转去处理突发事件,处理完毕后CPU又返回原程序被中断的位置并继续执行. 根据中断的来源,中断可分为内部中断和外部中断,内部中断的中断来源来自CPU内部(软件中断.溢出.除法错误等,例如,操作系统从用户态切换到内核态需借助CPU内部的软件中断),外部中断的中断来源来自CPU外部,由外设提出请求. 根据中断是否可以屏蔽分为可屏蔽中断与不屏蔽中断(NMI),可屏蔽中断

[web建站] 极客WEB大前端专家级开发工程师培训视频教程

极客WEB大前端专家级开发工程师培训视频教程  教程下载地址: http://www.fu83.cn/thread-355-1-1.html 课程目录:1.走进前端工程师的世界HTML51.HTML5与HTML4的区别2.HTML5新增的主体结构元素3.HTML5新增的的非主体结构元素 4.HTML5表单新增元素与属性5.HTML5表单新增元素与属性(续)6.HTML5改良的input元素的种类 7.HTML5增强的页面元素8.HTML5编辑API之Range对象(一)9.HTML5编辑API之