20155218 《嵌入式基础》

20155218 《嵌入式基础》

要求:

在作业本上完成附图作业,要认真看题目要求。
提交作业截图
作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清零)

课上做错的内容:

  1. C语言对寄存器的操作;
  2. 提取位和插入位的设置;

课下补充实践:

1. C语言对寄存器的操作;

在嵌入式开发中,我们需要对寄存器进行写入,读出等等操作。每个寄存器都有自己固有的地址,我们需要通过C语言访问这些地址。

#define Time_Addr 0xFFFFC0000;
#define Time        *(volatile  int *)(Time_Addr+2)

该寄存器是16位的,因为要避免程序执行过程中直接从cache中读取数据,所以用volatile进行修饰。每次都要重新读取该地址上的值。首先(volatile int)是一个指针,我们就假设它为p吧。它存储的地址就是后面的(Time_Addr+2),然后取这个地址的值,也就是p,接下来我们就能直接赋值给Time来改变地址上(Time_Addr+2)存储的值了。

2. 提取位和插入位的设置;

  • 在课上的时候我没注意就写了一个0x3F;其实hours和和seconds都只占用了5位,应该为00000000000011111,即十六进制的0x1F;
  • 在hours中需要将数据右移11位然后和0x1F进行&运算,将其余各位清零,只保留hours,即可得到hours;
  • 在seconds中不需要移位,但我们看到“seconds?2”的标志,这是因为hour=24,minute=60,seconds=60,各需要5位,6位,6位;但是寄存器只有16位,需要seconds需要?2;

代码:

hours:

#define Time_Addr 0xFFFFC0000;
#define Time        *(volatile  int *)(Time_Addr+2)
void sethours(int hours)
{
    int oldtime,newtime;
    oldtime =Time;
    newtime =oldtime&~(0x1F<<11);
    Time =newtime|(hours<<11);
}
void getseconds()
{
    int time =Time;
    return (time>>11)&0x1F;
}

seconds:

#define Time_Addr 0xFFFFC0000;
#define Time        *(volatile  int *)(Time_Addr+2)
void setseconds(int seconds)
{
    int oldtime,newtime;
    oldtime =Time;
    newtime =oldtime&~0x1F;
    Time =newtime|seconds;
}
void getseconds()
{
    int time =Time;
    return time&0x1F;
}

原文地址:https://www.cnblogs.com/xzh1996/p/8184295.html

时间: 2024-11-03 11:48:36

20155218 《嵌入式基础》的相关文章

课后实践之嵌入式基础20155314

课后实践之嵌入式基础 任务详情 在作业本上完成附图作业,要认真看题目要求. 提交作业截图 作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清零) 预备知识 嵌入式C语言--嵌入式系统中的数据打包 地址的定义 #define DATA_Addr 0x0C00000 #define DATA *(volatile int *)(DATA_Addr) DATA = 0x1234; 提取位 提取Minutes: 分析:由于Seconds占5位,因此需要先右移5位将Minutes的最低

20155228 2018-01-03 课堂测试:嵌入式基础

20155228 2018-01-03 课堂测试:嵌入式基础 题目和要求 在作业本上完成附图作业,要认真看题目要求. 提交作业截图 作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清零) 分析和设计 根据题意设置基地址和存放时间的寄存器的地址 #define Time_Addr 0xFFFFC0000 //定义基地址 #define Time *(volatile int *)(Time_Addr+2) //时间存放在基址+2的寄存器中 设置小时 寄存器中时间小时的数据放在第

嵌入式基础教程之嵌入式系统的知识体系

嵌入式系统的应用范围可以粗略分为两大类:电子系统的智能化(工业 控制.现代农业.家用电器.汽车电子.测控系统.数据采集等),计算机应用的延伸(MP3.手机.通信.网络.计算机外围设备等).从这些应用可以看出, 要完成一个以MCU为核心的嵌入式系统应用产品设计,需要硬件.软件及行业领域相关知识.硬件主要有MCU的硬件最小系统.输入/输出外围电路.人机接口设计.软件设计有固化软件的设计,也可能含PC机软件的设计.行业知识需要通过协作.交流与总结获得. 概括地说,学习以MCU为核心的嵌入式系统,需要以

嵌入式基础知识与嵌入式设计应具备的基本技能

嵌入式系统的定义:               以应用为中心,以计算机技术为基础,且软硬件可裁减,适应应用系统对功能.可靠性.成本.体积.功耗的严格要求的专用计算机系统. 嵌入式系统的特点:               系统内核小:嵌入式系统一般是应用于小型电子装置的,系统资源相对有限,所以内核较之传统的操作系统要小得多               专用性强:嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进行系统的移植               系统精简:嵌入式系统

嵌入式基础知识

================ 内存管理 ===============1.从地地址到高地址依次为:代码区.数据区.堆区.栈区.命令行参数及环境变量区域 2.局部变量:局部变量位于栈区 栈区特点: 1.栈区当中变量未初始化之前都为随机值 2.在变量作用域结束后,变量空间被操作系统收回 全局变量:全局变量位于数据区 数据区特点: 1.数据区中变量未初始化之前都是0 2.在程序结束后,变量空间被操作系统收回 静态变量:静态变量位于数据区特点: 1.数据区中变量未初始化之前都是0 2.在静态变量作用

开始ITGEGE教育社区的视频录制----嵌入式基础知识讲解

从8月份开始,陆陆续续要对我的第一份兼职工作ITGEGE讲师做教学视频录制了,本人水平有限,我只讲一些开发在工作中的应用,其它细节的东西不做深究,毕竟本人工作经验和精力也有限,白天要上班,特别是最近又有新的项目要来了,要学习新的东西,平时也会在CSDN的特邀编辑选拔一些CSDN的精选文章,这也算是第二份兼职吧,和CSDN社区合作了,我觉得挺不错的,既有收益又能学到CSDN社区一些大神写的东西,感谢CSDN的陈秋歌女士的信任和支持.再者我比较喜欢玩的,毕竟适当学习要适当放松,愉悦一下也不错.欢迎一

嵌入式基础知识 2

sqlite数据库===>SQL 0.介绍 1.数据库的安装 1.1 拷贝压缩包 sqlite-autoconf-3080500.tar 到linux虚拟机中 1.2 解开压缩包 ===> tar -zxvf sqlite-autoconf-3080500.tar.gz 1.3 进入到解开的目录 sqlite-autoconf-3080500 中,cd sqlite-autoconf-3080500 1.4 ./configure 1.5 make 1.6 suduo make install

嵌入式基础—C语言(3)—优先级

优先级 1-特殊符号 [] ()  .    —> 2-单目运算 ++     --    !     ~    &    *    (类型)       sizeof()       - 3-双目运算 1)算术运算   +  -   *    /   % 2)移位运算 3)关系运算 4)位运算 5)逻辑运算 4-三目运算 5-赋值运算 6-逗号运算 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右   () 圆括号 (表达式)/函数名(

嵌入式基础—C语言(1)—vim编辑器的常用命令

[1] [email protected]:~$ [email protected]:用户名@计算机名 ~:家目录 $:提示符 [2] 开启终端 ctrl+shift+n:打开为当前目录 ctrl+alt+t:打开终端默认为家目录 [3] ls 浏览目录 ls   -a     浏览所有的文件,包括隐藏文件,隐藏文件以"."开头 ls   -l     列表显示 -h    显示大小,K , M , G [4] touch  创建文件 echo "hello world&qu