在keil中使用bdata型可位定址全域性變數

2021-08-20 02:22:21 字數 820 閱讀 3273

使用keil開發51微控制器下位機程式,希望使用dbata型全域性變數。首先了解一下51的片內ram.

51微控制器中,片內ram分為data,bdata,和idata,

data指前面0x00-0x7f 128個位元組。

idata指的是0-0xff 這256個位元組儲存區。前128個位元組同data完全相同。

bdata是片類可位定址的儲存區,位址位0x20-0x2f 的16位元組儲存區,和可位定址的特殊功能暫存器。

不同於一般的全域性變數,用bdata申明的變數在標頭檔案中不能新增extern關鍵字,否則編譯器提示my.h(6): error c142: 't1': invalid base address。

為此寫了乙個測試,並設定斷點觀察變數的變化。

my.h

#ifndef __my_h__

#define __my_h__

#include char bdata t1 ;//_at_ 0x20;

sbit t2=p1^0;

sbit t1_7=t1^7;

extern void test();

#endif

my.c

#include "my.h"

//char bdata t1 _at_ 0x20;

void test()

test.c

#include #include "my.h"

main()

}

除錯時候開啟,view/watch windows 檢視t1_7的變化。

malloc 函式在keil中使用應注意什麼

在keil 中使用malloc 函式經常會遇到不正常的情況,通常表現為不能正確分配記憶體 空間,或者只能分配很小的空間。出現這個問題的原因大概有三個 1 所用的arm 晶元本身記憶體已經被其 占用,所餘空間不夠malloc分配。解決辦法 a 釋放其他 浪費的ram空間 b 擴容。2 未進行堆的初始化...

keil中使用 變引數巨集 VA ARGS

本文說的 va args 就是乙個可變引數巨集,與printf中可變引數的巨集定義乙個道理,是新c99規範中增加的。va args 詳情內容 va args 它是乙個可變引數的巨集,就是將左邊巨集中 的內容原樣抄寫在右邊 va args 所在的位置。要注意的是,printf 的輸出格式是括號內左邊是...

在article文件型別中使用中文字型

在atricle文件中使用中文字型需要使用基礎xecjk巨集包 xelatex編譯器,並設定相應的字型,如下 documentclass 11pt,a4 usepackage 呼叫 xecjk 巨集包,當然這裡換成ctex巨集包也是可以的,畢竟用xelatex編譯的時候會自動呼叫基礎巨集包xecjk...