首页 > 其他分享 >20211327 嵌入式基础

20211327 嵌入式基础

时间:2023-12-22 16:45:10浏览次数:40  
标签:setHour hour int void 基础 嵌入式 TIME 20211327 struct

嵌入式基础

信息安全系统有时间戳的需求,因此密码系统有实时钟芯片。假设实时钟芯片的IO 映像基址是 全局变量unsignted int TIME的指针地址,时间存放在(基址+2)的寄存器中(默认值为当前时间),寄存器是 16位,结构如附件中图所示

  1. 按照下图给出TIME的注释(6‘)
  2. 定义基于16位寄存器的宏(4‘)
  3. 使用至少两种方式(位运算,位域)完成如下功能,实现在timeXXXX1.c,timeXXXX2.c模块中(XXXX为你的四位学号),模块头文件为timeXXXX.h(30')
    void setHour(int hour)
    int getHour()
  4. 完成mainXXXX.c测试模块,测试你完成的代码,setHour的参数至少包含一条(你的学号%24)的值(10’)

按照下图给出TIME的注释

  • 置位
?bits = bits | (1 << 7) ; /* sets bit 7 */

bits |= (1 << 7) ; /* sets bit 7 */

#define SET_BIT (n,bits) do{bits |= (1<<n)}while(0)
  • 清除
bits &= ~(1 << 7) ; /* clears bit 7 */
#define CLR_BIT (n,bits) do{bits &=~ (1<<n)}while(0)
  • 反转位
bits ^= (1 << 6) ; /* flips bit 6 */
#define FLIP_BIT (n,bits) do{bits ^= (1<<n)}while(0)

提取位

插入位

  • 由于Seconds占5位,因此需要先右移5位将Minutes的最低位与位0对齐,再与上3F(0000 0000 0011 1111)即可将6-15位全部清0,则获得minute部分。
  • 0x3F出处为:对于minute一共有6bit,即(111111)2,转换为16进制即为0x3F;

定义基于16位寄存器的宏

// 置位
#define SET_BIT_16(reg, bit) ((reg) |= (1 << (bit)))

// 清除
#define CLR_BIT_16(reg, bit) ((reg) &= ~(1 << (bit)))

// 反转位
#define FLIP_BIT_16(reg, bit) ((reg) ^= (1 << (bit)))

// 示例使用
unsigned short registerValue = 0xABCD; // 16位寄存器的默认值

// 置位第 7 位
SET_BIT_16(registerValue, 7);

// 清除第 7 位
CLR_BIT_16(registerValue, 7);

// 反转第 6 位
FLIP_BIT_16(registerValue, 6);

void setHour(int hour) 和 int getHour()

方式一:使用位运算

// timeXXXX1.c

#include "timeXXXX.h"

void setHour(int hour)
{
    int oldtime = TIME;
    int newtime = oldtime & ~(0x1F << 11); // 清除原来的 Hours
    newtime |= (hour & 0x1F) << 11;       // 设置新的 Hours
    TIME = newtime;
}

int getHour()
{
    int time = TIME;
    return (time >> 11) & 0x1F;
}

方式二:使用位域

// timeXXXX2.c

#include "timeXXXX.h"

struct TimeRegister {
    unsigned int reserved : 11; // 保留位
    unsigned int hour : 5;      // 小时位
};

void setHour(int hour)
{
    struct TimeRegister *timeReg = (struct TimeRegister *)&TIME;
    timeReg->hour = hour & 0x1F; // 设置新的 Hours
}

int getHour()
{
    struct TimeRegister *timeReg = (struct TimeRegister *)&TIME;
    return timeReg->hour;
}

共用的头文件 timeXXXX.h

// timeXXXX.h

#ifndef TIME_XXXX_H
#define TIME_XXXX_H

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

void setHour(int hour);
int getHour();

#endif // TIME_XXXX_H

标签:setHour,hour,int,void,基础,嵌入式,TIME,20211327,struct
From: https://www.cnblogs.com/shen-jianxiang/p/17921936.html

相关文章

  • 嵌入式基础问题1,2,3
    图片中的寄存器结构表示了一个16位的时间格式,其中包含了小时、分钟和秒。这个16位的寄存器被分为三个部分:位15到位11表示小时(Hours),总共5位。位10到位5表示分钟(Minutes),也是6位。位4到位0表示秒(Seconds),这里注意到是“Seconds+2”,意味着这5位的值需要加上2才是实际的秒数。这......
  • 嵌入式基础
    time1317.h文件位运算使用位域实现main1317函数1317%24为21,结果输出。......
  • day 03-3 Python基础-运算符
    3.运算符3.1常见的运算符算数运算符运算符描述示例+加-减*乘/除%取模-返回除法的余数10%3结果输出1**指数-幂,x的y次幂2**3结果输出位8//整除-返回商的整数部分9//2结果输出为49.0//2.0结果输出位4.0比较运算符运算符......
  • 计算机 JAVA 语言的基础小总结
    计算机JAVA语言的基础小总结一维数组和二维数组的定义及初始化在Java中,数组是一种数据结构,用于存储多个数据。数组中的元素是相同类型的数据。数组是一个引用数据类型,数组的变量只是一个引用,数组元素和数组变量在内存里是分开存放的。一维数组的定义和初始化一维数组在Jav......
  • Python DRF基础使用01
    目录1,web应用模式(了解)2,restful风格介绍(了解)3,restful设计风格(了解)4,restful案例(了解)5,数据准备6,查询所有数据(理解)7,创建对象(理解)8,获取单个对象(理解)9,修改单个对象(理解)10,删除单个对象(理解)11,DRF魅力展示(了解)12,序列化器概述(了解)13,序列化器定义(掌握)1......
  • Python DRF基础使用02
    目录1,ModelSerializer2,fields3,read_only_fields4,extra_kwargs5,APIView之request6,APIView之Response7,APIView实现列表视图8,APIView实现详情视图(带着id请求,所以叫做详情)9,二级视图,实现列表视图10,二级视图,实现详情视图11,get_object方法(三属性三方法其中一个)12,MiXin(提......
  • 01--python基础回顾
    一关于爬虫的特殊性1.网站的多变性:这个是爬虫的魅力.要全方位的去思考.就像找漏洞一样.思维逻辑不可能是固定的达到目的即可,不要死磕牛角尖2.访问频率调低爬虫程序如果编写的不够完善.访问频率过高.很有可能会对服务器造成毁灭性打击所以不要死盯着一个网站干.请......
  • 内蒙古某市财政提升IT基础监控运维案例剖析
    随着信息化建设的不断推进,内蒙古某市财政局的网络及运维管理面临着越来越多的挑战。为了解决这些问题,该财政局引入了监控易管理平台7.0,从而提升了IT基础监控的运行效率。一、现状与挑战随着财政局信息化的不断推进,其网络及运维管理面临着诸多问题。首先,该财政局的网络架构复杂,设备......
  • Redis基础
    一、redis简介​ Redis(RemoteDictionaryServer)是一个开源的内存数据结构存储系统,常用作数据库、缓存和消息中间件。它以高性能和丰富的数据结构支持而闻名,提供了字符串、哈希表、列表、集合、有序集合等多种数据结构。​ Redis主要特点包括:内存存储:Redis将数据存储在内存中,......
  • 基础数论
    目录质数质因数分解约数\(gcd\)求最大公约数质数质因数分解算术基本定理:\(任何一个大于1的正整数都能唯一分解为有限个质数的乘积,可以写作:\)\[N=p_1^{c_1}p_2^{c_2}...p_m^{c_m}\]\(其中c_i都是正整数,p_i都是质数,且满足p_1<p_2<...<p_m\)intprimes[N],cnt[N],m;voiddi......