1. 程式人生 > >IAR中 C語言位定義

IAR中 C語言位定義



__IO_REG8_BIT( SYS,             0xFFFFF802, __READ_WRITE )

#define __IO_REG8_BIT(NAME, ADDRESS, ATTRIBUTE)                 \

                      __near __no_init volatile ATTRIBUTE union \

                        {                                       \

                          unsigned char NAME;                   \

                          __BITS8 NAME ## _bit;                 \ // ## _bit ?? ## 可以連線前後

                                                                               //比如 NAME 是 a,這句就//是    __BITS8   a_bit;

                        } @ ADDRESS;

typedef struct

{

    unsigned char no0:1;

    unsigned char no1:1;

    unsigned char no2:1;

    unsigned char no3:1;

    unsigned char no4:1;

    unsigned char no5:1;

    unsigned char no6:1;

    unsigned char no7:1;

} __BITS8;

__near

Syntax Follows the generic syntax rules for memory type attributes that can be used on data

objects, see Type attributes, page 193.

Description The __near memory attribute overrides the default storage of variables given by the

selected data model and places individual variables and constants in near memory. You

can also use the __near attribute to create a pointer explicitly pointing to an object

located in the near memory.

Storage information Address range: 0x0-07FFF and 0xFFFF8000-0xFFFFFFFF (64 Kbytes)

Example __near int x;

See also Memory types, page 13.

__no_init

Syntax Follows the generic syntax rules for object attributes, see Object attributes, page 195.

Description Use the __no_init keyword to place a data object in non-volatile memory. This means

that the initialization of the variable, for example at system startup, is suppressed.

Example __no_init int myarray[10];

#define PRERR             SYS_bit.no0

在stdbool.h中,定義了一個位巨集,如果需要變數定義,就是如下:
bool abit;
abit就是一個位變量了,這種方法簡單,但是在多個位的時候不好處理,比如需要一批位變數
初始化的時候。
還可以採用如下方法:
typedef struct
{
    unsigned char no0:1;
    unsigned char no1:1;
    unsigned char no2:1;
    unsigned char no3:1;
    unsigned char no4:1;
    unsigned char no5:1;
    unsigned char no6:1;
    unsigned char no7:1;
} __BIT8 ;
volatile union { unsigned char strack; __BIT8 strack_bit; } ;
union { unsigned char sk; __BIT8 sk_bit; } ;
定義位:
#define mflag        strack_bit.no0

volatile union { unsigned char strack; __BIT8 strack_bit; } ;
中加上VOLATILE,如果發現給編譯器優化掉,就一定要加上,
strack 就是一個可按位操作的變數,
strack=0;就可以把所有8個位全部清零,比起BOOL方便一些。

相關推薦

IAR C語言定義

 __IO_REG8_BIT( SYS,             0xFFFFF802, __READ_WRITE ) #define __IO_REG8_BIT(NAME, ADDRESS, ATTRIBUTE)                 \         

C語言巨集定義#define的井號#的使用

#include <stdlib.h> #include <stdio.h> #include <string.h> typedef enum { E_1, E

C語言定義技巧——多次包括頭文件內容不同

ear 文件 我們 art bsp enum class 包括 nbsp 1、 頭文件定義例如以下: /* declears in “funcs.h” */ FUNC_1(ID_FUN1_001) FUNC_1(ID_FUN1_002) FUNC_2(ID_FUN2_

C語言域的一些知識

結果 完整 signed 編譯 har 占用 之間 相對 方式 有些信息在存儲時,並不需要占用一個完整的字節, 而只需占幾個或一個二進制位。例如在存放一個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省存儲空間,並使處理簡便,C語言又提供了一種數據結構,稱為“位域

[轉]c語言定義#define的理解與資料整理

執行 跟蹤 single 字母 number 而是 字符串 endif 一段 原文地址:http://www.cnblogs.com/haore147/p/3646934.html 1. 利用define來定義 數值宏常量   #define 宏定義是個演技非常高超的替

C語言運算遇到的坑

右移 ble 實現 ret ade int 只需要 res 置0 在Data Lab中有一個logicalShift函數給定一個值x和需要移動的位數n,要求只是用運算符:~ & ^ | + << >>,實現邏輯右移運算。思考了很久,然後我寫出

c語言定義詳解

size_t類型 32bit 0地址 typedef pca 值類型 日期 tof 什麽 1,防止一個頭文件被重復包含 #ifndef COMDEF_H #define COMDEF_H //頭文件內容 #endif 2,重新定義一些類型,防止由於各種平臺和編譯器的不同

c語言巨集定義#define

1. 利用define來定義 數值巨集常量     #define 巨集定義是個演技非常高超的替身演員,但也會經常耍大牌的,所以我們用它要慎之又慎。它可以出現在程式碼的任何地方,從本行巨集定義開始,以後的程式碼就就都認識這個巨集了;也可以把任何東西定義成巨集。因為編譯器會在預編譯的時候用真身替換

c語言定義函式,10月28日總結

現在時間23點34分,我想看看我幾點能完成   今天總結自定義函式的使用,先從最基礎的地方開始 1.形參實參 在定義函式的時候,函式大多數都有引數,在被主調函式需要傳遞資料給函式的引數 函式定義時用的變數叫形參 傳遞給函式的中形參值或變數叫實參 int m

C語言高階篇 - 2.C語言操作

1、位操作符         (1)位與&         (2)位或|         (3)位取反~      

C語言結構定義

#include <stdio.h> int main(void) { typedef struct book{ char name[5]; int year; }bookstore; bookstore book1={.name="ssss",.year=201

C語言變數定義與微控制器資料儲存方式

說明:文章來源 EDN電子技術設計:嵌入式程式開發需要知道的儲存器知識 MCU 中常使用的儲存器型別有:FLASH、RAM、ROM(包括EEPROM) 在軟體角度來看,程式和資料的儲存分為以下幾個部分 程式碼段和常量段都可以用於儲存常量資料,其主要區

《6.C語言巨集定義與預處理、函式和函式庫》

《6.C語言巨集定義與預處理、函式和函式庫》 第一部分、章節目錄 4.6.1.C語言預處理理論 4.6.2.C語言預處理程式碼實戰 4.6.3.巨集定義1 4.6.4.巨集定義2 4.6.5.函式的本質 4.6.6.函式的基本使用 4.6.7.遞迴函式 4.6.8.函式庫 4.6.9.字

初階C-1103,C語言定義函式練習

title: 初階C-1103 date: 2018-11-05 23:24:13 tags: C初階 1.實現一個函式,列印乘法口訣表,口訣表的行數和列數自己指定,輸入9,輸出99口訣表,輸入12,輸出1212的乘法口訣表。 #include<stdio.h> #inc

C語言巨集定義和巨集定義函式

轉自:http://blog.sina.com.cn/s/blog_861912cd0100tc94.html 要寫好C語言,漂亮的巨集定義是非常重要的。巨集定義可以幫助我們防止出錯,提高程式碼的可移植性和可讀性等。   在軟體開發過程中,經常有一些常用或者通用的功能或者程式碼段,這些功能既

簡單的C語言巨集定義結合全域性變數的方法實現微控制器串列埠實現透傳模式

何謂透傳? 根據百度百科給出的定義如下:        透傳,即透明傳輸(pass-through),指的是在通訊中不管傳輸的業務內容如何,只負責將傳輸的內容由源地址傳輸到目的地址,而不對業務資料內容做任何改變。        在現實微控制器產品開發過程中,如果存在多個

linuxC語言標頭檔案詳解

linux中C程式標頭檔案的種類 一類:#include<stdio.h> stdio.h檔案就在/usr/include目錄下 二類:#include<arpa/inet.h> arpa/是/usr/include目錄下的子目錄,inet.h其實是/usr/include

C語言-運算子

1、C語言中的位運算子    位運算子直接對bit位進行操作,其效率最高。 左移和右移注意點  -左運算元必須為整數型別     char和short被隱式轉換為int後進行移位操作  -右運算元的範圍必須為: [0, 31]  -左

c語言巨集定義函式如何呼叫

 直接呼叫即可。如下示例: #include<stdio.h> #define sum(b,c){int d=0;d=b+c;printf("兩者的和:%d\n",d);} int main() {     

C語言

有些資訊在儲存時,並不需要佔用一個完整的位元組, 而只需佔幾個或一個二進位制位。例如在存放一個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,C語言又提供了一種資料結構,稱為“位域”或“位段”。所謂“位域”是把一個位元組中的二進位劃分為幾