20155308《信息安全系統設計基礎 嵌入式C語言課堂考試補博客

20155308《信息安全系統設計基礎 嵌入式C語言課堂考試補博客

知識點

置位

  • ?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)

PPT上事例

  • 提取位
    code

  • 插入位
    blog

  • 理解代碼
  1. 因爲Seconds佔5位,所以須要先右移5位將Minutes的最低位與位0對齊,再與上3F(0000 0000 0011 1111)便可將6-15位所有清0,則得到minute部分。
  2. 0x3F出處爲:對於minute一共有6bit,即(111111)2,轉換爲16進制即爲0x3F;
  • 地址的定義
#define DATA_Addr 0x0C00000
#define DATA *(volatile int *)(DATA_Addr)
DATA = 0x1234;
  • 最終代碼
#define Time_Addr 0xFFFFC0000 //實時鐘芯片的IO映像基址是OxFFFFC0000
#define TIME *(volatile int *)(Time_Addr+2) //時間存放在基址+2的寄存器中
void SetMinutes(int minutes) //插入Minutes
{
    int oldtime=TIME;
    int newtime;
    newtime=oldtime&~(0x3F<<5);
    newtime|=(minutes&0x3F)<<5;
    TIME=newtime;
}
int getMinutes() //取出Minutes
{
    int time=TIME;
    return (time>>5)&0x3F;
}

課上考試題

  • 理解代碼

因爲Seconds佔5位,Minutes佔6位,所以須要先右移11位將Hours的最低位與位0對齊,再與上1F(0000 0000 0001 1111)便可將5-15位所有清0從而取出Hours的所有5位。ip

  • 最終代碼
#define Time_Addr 0xFFFFC0000 //實時鐘芯片的IO映像基址是OxFFFFC0000
#define TIME *(volatile int *)(Time_Addr+2) //時間存放在基址+2的寄存器中
void SetHours(int hours) //插入Hours
{
    int oldtime=TIME;
    int newtime;
    newtime=oldtime&~(0x1F<<11);
    newtime|=(hours&0x1F)<<11;
    TIME=newtime;
}
int getHours() //取出Hours
{
    int time=TIME;
    return (time>>11)&0x1F;
}

練習題


void SetSeconds(int seconds)
int Getseconds()get

#define Time_Addr 0xFFFFC0000 //實時鐘芯片的IO映像基址是OxFFFFC0000
#define TIME *(volatile int *)(Time_Addr+2) //時間存放在基址+2的寄存器中
void SetHours(int hours) //插入Hours
void SetSeconds(int seconds) //插入Seconds
{
    int oldtime=TIME;
    int newtime;
    newtime=oldtime&~0x1F;
    newtime|=(seconds/2)&0x1F;
    TIME=newtime;
}
int getSeconds() //取出Seconds
{
    int time=TIME;
    return (time&0x1F)*2; //此處不考慮Seconds除2帶來的偏差,所以直接乘2
}
相關文章
相關標籤/搜索