• slider image 514
  • slider image 516
  • slider image 517
  • slider image 518
  • slider image 519
:::


Browsing this Thread:   2 Anonymous Users






Re: HI-TECH C Compiler Lite and PRO 轉換異常問題
#9
初級會員
初級會員


查看用戶資訊
參照:

2bod 寫道:
除了記憶體外,記得把bit宣告的記憶體空間也要設定初始值,我就是那邊沒初始才錯亂的

例1
bit _AC_fault;
void main(void)
{
_AC_fault = 0;
.
.
}

例2
union
{
unsigned ALL;
struct
{
unsigned : 1;
unsigned : 1;
unsigned CHG1_AC_fault : 1;
unsigned CHG1_Vtemp_bat_hi : 1;
unsigned CHG1_Vtemp_hi : 1;
unsigned CHG1_Vbat_hi : 1;
unsigned CHG1_Run_order : 1;
unsigned CHG1_Run_command : 1;
};
}FLAGE_CHG;
#define CHG_Errorbits FLAGE_CHG.ALL
#define _AC_fault FLAGE_CHG.AC_fault
#define _Vtemp_bat_hi FLAGE_CHG.Vtemp_bat_hi
#define _Vtemp_hi FLAGE_CHG.Vtemp_hi
#define _Vbat_hi FLAGE_CHG.Vbat_hi
#define _Run_order FLAGE_CHG.Run_order
#define _Run_command FLAGE_CHG.Run_command

void main(void)
{
CHG_Errorbits = 0;
.
.
}


我有把所有該給預設值的變數 在 MAIN 裡面重設了

因為還是不能解決問題

所以打算重寫

發表於: 2010/1/29 12:37
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: HI-TECH C Compiler Lite and PRO 轉換異常問題
#8
版主
版主


查看用戶資訊
變數要不要賦予初始值是要看你的程式需求,如果是當旗號一般是要的,如果是當資料的 Buffer 那就不一定要給初始值。
當然對變數一開始就賦予初始值是比較好的作法而且是建議的。

有關 Hi-Tech PICC 對位元的宣告有三種方法,如想知道可以看一下 Hi-Tech PICC 的教育訓練教材。裡面有提到:
1. 與絕對位址變數共用
Hi
-Tech C 的專用語法
一般用來定義特殊暫存器
(SFR)的獨立位元
特殊暫存器
(SFR)內的位元定義 – PIC168xA.h

2. 使用 bit 定義位元變數
Hi
-Tech C 的專用語法
最簡單方便的使用方式

3. 位元結構方式
ANSI C 標準使用方式

位元變數已第二種方式最為簡單,而且 Compiler 會自動整合 bit 變數在一個 8
-bit 裡。底下就是使用範例參考一下:

範例 利用 bit 定義位元變數
        
static bit Count_Flag ;
        static 
bit Buzzer_1_Flag ;

        
Buzzer_1_Flag ;
        if (
Count_FlagCount_Flag ;

發表於: 2010/1/29 10:33
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: HI-TECH C Compiler Lite and PRO 轉換異常問題
#7
中級會員
中級會員


查看用戶資訊
除了記憶體外,記得把bit宣告的記憶體空間也要設定初始值,我就是那邊沒初始才錯亂的

例1
bit _AC_fault;
void main(void)
{
_AC_fault = 0;
.
.
}

例2
union
{
unsigned ALL;
struct
{
unsigned : 1;
unsigned : 1;
unsigned CHG1_AC_fault : 1;
unsigned CHG1_Vtemp_bat_hi : 1;
unsigned CHG1_Vtemp_hi : 1;
unsigned CHG1_Vbat_hi : 1;
unsigned CHG1_Run_order : 1;
unsigned CHG1_Run_command : 1;
};
}FLAGE_CHG;
#define CHG_Errorbits FLAGE_CHG.ALL
#define _AC_fault FLAGE_CHG.AC_fault
#define _Vtemp_bat_hi FLAGE_CHG.Vtemp_bat_hi
#define _Vtemp_hi FLAGE_CHG.Vtemp_hi
#define _Vbat_hi FLAGE_CHG.Vbat_hi
#define _Run_order FLAGE_CHG.Run_order
#define _Run_command FLAGE_CHG.Run_command

void main(void)
{
CHG_Errorbits = 0;
.
.
}

發表於: 2010/1/29 10:10
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: HI-TECH C Compiler Lite and PRO 轉換異常問題
#6
初級會員
初級會員


查看用戶資訊
參照:

2bod 寫道:
我的也會出現異常
但只要再主程式最前面把所有變數再給初始值一次就OK了

假設主程式前的宣告
unsigned char MAIN_acc = 0;
在lite版本時都會自動幫我清為0
但我剛灌PRO版本時,也出現動作異常
我以為此變數為0了,但是我一開始去讀取的時候卻不為0,是亂碼

因此我改寫成
unsigned char MAIN_acc;

void main(void)
{
MAIN_acc = 0;
.
.
}

我把所有變數再給一次初始值就OK了,雖然麻煩但不這麼做好像感覺隨時產品出貨會有不踏實的感覺

我去年下載的時候是9.65版


感謝提供經驗,嚐試了一下,還是異常

發表於: 2010/1/29 9:13
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: HI-TECH C Compiler Lite and PRO 轉換異常問題
#5
中級會員
中級會員


查看用戶資訊
我的也會出現異常
但只要再主程式最前面把所有變數再給初始值一次就OK了

假設主程式前的宣告
unsigned char MAIN_acc = 0;
在lite版本時都會自動幫我清為0
但我剛灌PRO版本時,也出現動作異常
我以為此變數為0了,但是我一開始去讀取的時候卻不為0,是亂碼

因此我改寫成
unsigned char MAIN_acc;

void main(void)
{
MAIN_acc = 0;
.
.
}

我把所有變數再給一次初始值就OK了,雖然麻煩但不這麼做好像感覺隨時產品出貨會有不踏實的感覺

我去年下載的時候是9.65版

發表於: 2010/1/29 8:11
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: HI-TECH C Compiler Lite and PRO 轉換異常問題
#4
版主
版主


查看用戶資訊
好像 static 只對函數內產生的變數有用!?

ans: static 為靜態變數的宣告,僅用於函數內的變數宣告。
靜態變數的視野與區域變數是一樣的,只能在函數內部;但生命週期並不會隨函數執行結束而消失(保留下來)。
靜態變數的值存在於固定的記憶位址。
當該函數再次執行時,上次保留之變數值會繼續使用。


而 暫存器讀寫和中斷最好一定要用 volatile ?

ans: volatile 所宣告的變數值不一定要經由程式來改變,變數本身會自行或隨外在因素而改變。尤其像是周邊湛存器及中斷所使用到的變數。

這樣是否只要把全域變數宣告成 => volatile unsigned cahr X; 就都能適用?

ans: 是的,為避免變數被最佳化功能刪掉建議加上volatile 的宣告。

發表於: 2010/1/26 10:39
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: HI-TECH C Compiler Lite and PRO 轉換異常問題
#3
初級會員
初級會員


查看用戶資訊
參照:

Ryang 寫道:
Lite 版本不會對程式做最佳化的縮減,而 OCG 卻有全域性的最佳化功能。
所以在對變數宣告時要了解一下變數的性質,使用 Volatile 的宣告是有需要的尤其是對中斷裡所使用的變數。


我原本只要是全域宣告都用 "static volatile unsigned" + 資料型態

但是我嘗試著把所有全域宣告都去掉 static volatile

發現執行狀況確實不一樣,不過動作還是不正確

是不是有的地方一定要用 static volatile 或是擇其一

是不是有的地方一定 static volatile 兩種都不能 +

請問對於同一變數 X 在全域宣告的時候以下四種有差別?

unsigned cahr X;

static unsigned cahr X;

volatile unsigned cahr X;

static volatile unsigned cahr X;

好像 static 只對函數內產生的變數有用!?

而 暫存器讀寫和中斷最好一定要用 volatile ?

這樣是否只要把全域變數宣告成 => volatile unsigned cahr X; 就都能適用?

發表於: 2010/1/25 16:09

Edited by picer999 on 2010年01月25日 19:53:43
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: HI-TECH C Compiler Lite and PRO 轉換異常問題
#2
版主
版主


查看用戶資訊
Lite 版本不會對程式做最佳化的縮減,而 OCG 卻有全域性的最佳化功能。
所以在對變數宣告時要了解一下變數的性質,使用 Volatile 的宣告是有需要的尤其是對中斷裡所使用的變數。

發表於: 2010/1/25 11:46
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


HI-TECH C Compiler Lite and PRO 轉換異常問題
#1
初級會員
初級會員


查看用戶資訊
為了免除 (1273) Omniscient Code Generation not available in Lite mode (warning) 這個警告

於是移除 HI-TECH C Compiler for PIC10-12-16 MCUs V9.70

重新安裝選擇 45 天 PRO 模式試用

結果卻發生燒錄原本程式(設定也都沒變),但是所有動作都異常

再次移除 HI-TECH C Compiler ... 再次安裝回 Lite

同樣再燒錄原本程式,動作又都正常了

反覆再一次測試,也都是這樣的狀況 ...

一頭霧水 ... 請問我有哪邊疏失導致的嗎?

發表於: 2010/1/25 10:48
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------