使用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...