• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::

論壇索引


Board index » All Posts (biko)




Re: c30 陣列與強制轉型及指標的問題
資深會員
資深會員


可是…我是組合語言自吃耶^^"
可不可以直接說明呢?謝謝

我在pc端的程式(BCB)也遇到相同的問題,就是如果要將BYTE的陣列強制轉型的話,那麼陣列的位址也一定要是0或是偶數的才可以。
我在想…會不會是C COMPILER的規則?。

參照:

master 寫道:
把Disassembly視窗打開看應該就能瞭解了....XD

發表於: 2008/11/6 19:12
我相信解決問題的方法不只一種,所以我在回答同好的問題時或者提出與主題不同的方案,
請不要以此做為攻擊的目標,畢竟我也只是想和大家討論如何解決問題而已…
解決問題最重要,.....
頂部


Re: 程式碼一問,為何編譯過不了??
資深會員
資深會員


找一下您整個案子裡的"OC1CON"都改成
"OC1CON1"應該就可以了…
因為新的.h檔裡沒有"OC1CON"

您可以去您的C30安裝目錄看一下
p24FJ64GB106.h裡有關OC1CON1的部份


參照:

foxbaby 寫道:
還是過不了好奇怪
我都有加了
我把檔案放上來麻煩幫我看一下

錯誤訊息還是一樣:
C:\Program Files\Microchip\MPLAB C30\lib\PIC24F\libpPIC24Fxxx-coff.a(OpenOC1.o)(.libperi+0x4): In function `OpenOC1':
fake:47: undefined reference to `OC1CONbits'
C:\Program Files\Microchip\MPLAB C30\lib\PIC24F\libpPIC24Fxxx-coff.a(OpenOC1.o)(.libperi+0xa):fake:50: undefined reference to `OC1CON'
Link step failed.

發表於: 2008/11/6 18:58
頂部


Re: 程式碼一問,為何編譯過不了??
資深會員
資深會員


您的linker script好像沒加上去耶,您的MCU是PIC24FJ128GB106,
所以去您安裝的C30目錄下找一個檔案名為p24FJ128GB106.gld,把它加到專案裡看看。

發表於: 2008/11/6 16:04
頂部


Re: 請問C30中(AND)(>>)運算元
資深會員
資深會員


我在想…這種位元運算子可能只能用在整數的資料型態,尤其是unsigned 的整數資料型態,不然應該很容易弄錯。
您可能需要再去看一下有關指標和強制轉型方面的資料,這對您有幫助的。

就您的需求假設你是用uart將資料傳到另一個MCU,我會像下面這樣的寫法。


extern void uart_tx(unsigned char *data, unsigned char data_length);//利用UART傳資料的函式

double Gps;//你要傳的Gps資料

//-----------
//
//-----------
void double_tx_gps(void)
{
uart_tx((unsigned char *)&Gps, sizeof(double));//將Gps強制轉成unsigned char送出
}


另外再給您一個函式幫助您思考:

//------------
//
//------------
void demo_func(void)
{
unsigned int int_a = 0x1234;//假設sizeof(int) = 2;
unsigned char arr[4];
unsigned char *p;

double f1 = 0.123;//假設sizeof(double) = 4;
double f2;

p = (unsigned char *)&int_a;

arr[0] = p[0];//此時arr[0]會等於0x34;
arr[1] = p[1];//此時arr[0]會等於0x12;


p = (unsigned char *)&f1;
//以下四行程式已經將f1分成4個byte分別存到arr[]裡,如果各別看arr[]裡的資料是無意義的
arr[0] = p[0];
arr[1] = p[1];
arr[2] = p[2];
arr[3] = p[3];

//將arr[]的位址強制轉型成double,再將這個位址裡的值丟給f2
f2 = *(double)arr;//此時f2會等於0.123



}

發表於: 2008/11/6 12:13
頂部


Re: 請問 C30 的延遲時間怎麼寫
資深會員
資深會員


參照:

jghn 寫道:
請問 C30 的延遲時間怎麼寫


通常我會用一個timer當作系統時間,它通常都會被設定為每10ms中斷一次,然後我會在裡面加一個counter當做delay用的變數,例如我在timer 中斷函式裡放入

void timer_isr(void)
{
if(DelayTimer) DelayTimer--;
}



接下來我就可以在其它函式裡使用它了。
例如:

void func1(void)
{
LATD0 = 1;
DelayTimer = 100;//因為每10ms會減1,所以100就等於1秒;
While(DelayTimer);//當中斷裡的DelayTimer = 0時就會跳開;

LATD0 = 0;

}

發表於: 2008/9/9 20:31
我相信解決問題的方法不只一種,所以我在回答同好的問題時或者提出與主題不同的方案,
請不要以此做為攻擊的目標,畢竟我也只是想和大家討論如何解決問題而已…
解決問題最重要,.....
頂部


c30 陣列與強制轉型及指標的問題
資深會員
資深會員


MCU是24H(16 bits)
Compiler是C30

//-----------------------------------------------
//
//-----------------------------------------------
void func1(void)
{
unsigned char data[] = {1,2,3,4,5,6,7,8};
unsigned int int_a, int_b;//sizeof(int) = 2 bytes

int_a = *(unsigned int *)&data[1];
int_b = *(unsigned int *)&data[2];

//照理說int_a會 = 0x0302;但是實際結果好像不會是如此?不知道為什麼?

//難道一定要這樣子嗎?陣列的起始一定要是0或是雙數才可以嗎?
int_a = *(unsigned int *)&data[0];

//這種問題我要怎麼解決呢?

//我現在的解決方式是
int_a = (data[2] << 8) + data[1];

//不過這樣又太麻煩了。
//不知道有什麼好方法?謝謝



}

發表於: 2008/9/9 20:05
我相信解決問題的方法不只一種,所以我在回答同好的問題時或者提出與主題不同的方案,
請不要以此做為攻擊的目標,畢竟我也只是想和大家討論如何解決問題而已…
解決問題最重要,.....
頂部


Re: HI-TECH compiler "const" 語法問題
資深會員
資深會員


void ShowFunctionMenu( unsigned const char *SourPtr )
{
unsigned char i, j;
unsigned char *DestPtr;
DestPtr = LcdDspBuf;
for(i = 0 ; i < 10 ; i++)
{
*(DestPtr++) = 0x00;
for(j = 0 ; j < 8 ; j++)
*(DestPtr++) = *SourPtr++;
}

發表於: 2008/6/12 23:42
頂部


Re: SPI master mode SSx 如何設定?
資深會員
資深會員


SSx這支腳只有在使用slave模式時才有用,這支腳會被SPI在slave模式時的模組所使用,在slave模式時,只有當SSx這支腳在低電位時,SPI模組(slave mode)才會對Master端送來的SCK有動作,進而產生資料的位移,所以在slave模式時SSx這支腳是不可以隨便換的,因為SPI模組(slave mode)只認識這支腳。

而在master模式下,SSx這支腳是可以當做一般IO的,也就是說,在master下,SSx這支腳並不在SPI模組裡使用,不過因為我們在使用Master模式的SPI時,都是在控制其它元件(slave 元件),所以我們在設計時通常直接用SSx這支腳來當做slave端的cs(或稱ss)腳,也就是將它當成一般IO使用。

發表於: 2008/4/4 1:50
頂部


Re: 請教用MCU和Ethernet 搭配使用方式
資深會員
資深會員


參照:

hsin_da 寫到:
請問PIC18F67J60要用什麼開發板?好像只有PIC18F97J60開發板,謝謝~


PIC18F67J60與PIC18F97J60其實差別不大,最大的不同應該是在程式/資料記憶体上,您可以上Microchip網站比較一下,通常在移植的時候都不會碰到太大的問題(幾乎不會有問題),所以如果您要做測試的話,其實用哪一顆都無所謂,等到要量產時再根據您的code size和腳位是否夠用來選擇最接近的型號就可以了。除非您在還沒測試之前就要百分之百的確認硬体要到位…

發表於: 2008/1/22 12:04
我相信解決問題的方法不只一種,所以我在回答同好的問題時或者提出與主題不同的方案,
請不要以此做為攻擊的目標,畢竟我也只是想和大家討論如何解決問題而已…
解決問題最重要,.....
頂部


Re: 請教用MCU和Ethernet 搭配使用方式
資深會員
資深會員


Microchip有兩種方式可以實作Ethernet,一個是單純的Ethernet晶片(ENC28J60)要配合一般的MCU,另一個是MCU內含Ethernet模組(67J60)。我們在使用時最初的規畫是使用單純的Ethernet晶片外加一顆18F8722,到最後我們是用67J60,因為它是內建的,所以可想而知它一定比ENC28J60存取的速度快很多(28J60是用SPI傳資料的),另外一點就是67J60的RAM夠大,這樣子在處理一些TCP/IP的Stack就不用怕記憶体不夠了,尤其是我們的做法是搭配sd card做一個有cgi功能的網頁伺服器,如果ram太小的話會寫得很痛苦,因為fat一次抓就是一個sector(512bytes),所以所以用67J60真的是比較好。

目前我們有做到網頁伺服器,並且有CGI的功能,而且可以將大量的資料直接用WEB的方式以表格顯示出來,真的很方便。

Microchip網站有Source code可以抓,我記得它可以用HITECH也可以用C18,我們是用HITECH,雖然可以用HITECH COMPILE,但是我們也是弄了很久才真正搞定,目前已經成功的完成TCP/IP的很多功能了。

我們的心得,給您做參考

發表於: 2007/8/27 22:19
我相信解決問題的方法不只一種,所以我在回答同好的問題時或者提出與主題不同的方案,
請不要以此做為攻擊的目標,畢竟我也只是想和大家討論如何解決問題而已…
解決問題最重要,.....
頂部



« 1 ... 85 86 87 (88) 89 »



:::

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... ]

教育訓練中心

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