Browsing this Thread:
1 Anonymous Users
Topic options
View mode
舊的在前
Re: Stack overflow reset Enable問題
高級會員
Joined
: 2007/4/11 16:53最後登入時間
: 2016/12/24 22:19
Group:
註冊會員
Level : 9
HP : 0 / 200
MP : 33 / 10208
EXP : 0
在程式的問題方面、有幾個問題: 假設我在主程式的時間call了一個副程式在使用、在使用中、被中斷了、中斷內又call了同樣的副程式。在副程式都是帶指標進去做存取的。這樣會有問題嗎? 二、我的spi程式writespi1 #include <p18cxxx.h> #include <spi.h> /******************************************************************** * Function Name: WriteSPI1 * * Return Value: Status byte for WCOL detection. * * Parameters: Single data byte for SPI1 bus. * * Description: This routine writes a single byte to the * * SPI1 bus. * ********************************************************************/ #if defined (SPI_V2) || defined (SPI_V3) unsigned char WriteSPI1( unsigned char data_out ) { unsigned int cnt; cnt = 1000; SSP1BUF = data_out; // write byte to SSP1BUF register if ( SSP1CON1 & 0x80 ) // test if write collision occurred return ( -1 ); // if WCOL bit is set return negative # else { while( !SSP1STATbits.BF ) // wait until bus cycle complete { if (!cnt) break; cnt--; _nop(); } } return ( 0 ); // if WCOL bit is not set return non-negative# } #endif 我將內部做了跳出的功能、我怕在死迴圈跑不出來、做了點改變。 而造成當機的時候 9/4/28 6:24:12 CAN TX = <10 82 11 82> 3-> 9 2 1 0/0/0 0:0:0 FSR1 = E2B 0/0/0 0:0:0 FSR1 = F34 0/0/0 0:0:0 STKPTR = 4 前面的時間無法讀取成功、時間是由讀取SPI介面的rtc。 判斷可能是讀不到spi的資料後造成stack overflow FSR1是在中斷內用一變數跟FSR1做比較如果FSR1大於變數就改變變數並丟出log來判斷 我設定的stack size為0x300 // $Id: 18f8622i.lkr,v 1.1 2004/01/27 19:06:39 sealep Exp $ // File: 18f8622i.lkr // Sample ICD2 linker script for the PIC18F8622 processor LIBPATH . FILES c018i.o FILES clib.lib FILES p18f8622.lib CODEPAGE NAME=vectors START=0x0 END=0x3F PROTECTED CODEPAGE NAME=page START=0x40 END=0xF7FF CODEPAGE NAME=DEV START=0xF800 END=0xFFFF PROTECTED CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED CODEPAGE NAME=eedata START=0xF00000 END=0xF003FF PROTECTED ACCESSBANK NAME=accessram START=0x0 END=0x5F DATABANK NAME=FLASH START=0x060 END=0x0FF DATABANK NAME=GPRS START=0x100 END=0x2FF DATABANK NAME=UART START=0x300 END=0x7FF DATABANK NAME=ECAN START=0x800 END=0xAFF DATABANK NAME=MAIN START=0xB00 END=0xBFF DATABANK NAME=stackregion START=0xC00 END=0xEFF //DATABANK NAME=gpr12 START=0xC00 END=0xEFF //DATABANK NAME=gpr13 START=0xD00 END=0xDFF //DATABANK NAME=gpr14 START=0xE00 END=0xEFF DATABANK NAME=gpr15 START=0xF00 END=0xF5F ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED SECTION NAME=DEV ROM=DEV SECTION NAME=CONFIG ROM=config SECTION NAME=GPRS RAM=GPRS SECTION NAME=UART RAM=UART //SECTION NAME=CANBUS RAM=CANBUS SECTION NAME=FLASH RAM=FLASH SECTION NAME=ECAN RAM=ECAN SECTION NAME=MAIN RAM=MAIN SECTION NAME=stackregion RAM=stackregion STACK SIZE=0x300 RAM=stackregion 上面是我的lkr檔能幫我看看有沒有什麼問題呢? 謝謝 真是當機當到怕了
發表於: 2009/4/28 11:53
Re: Stack overflow reset Enable問題
版主
Joined
: 2004/4/30 10:53最後登入時間
: 2021/11/30 18:11
From CAE, Microchip
Group:
站務管理者 註冊會員
Level : 75
HP : 744 / 1861
MP : 5367 / 111025
EXP : 45
確定一下發生的原因,一般是程式寫的不好。這個堆疊是指 RAM Stack 作為參數的傳遞用,會爆掉似乎成是有問題。是不是進去與出來的層數不對了。
發表於: 2009/4/24 14:19
Stack overflow reset Enable問題
高級會員
Joined
: 2007/4/11 16:53最後登入時間
: 2016/12/24 22:19
Group:
註冊會員
Level : 9
HP : 0 / 200
MP : 33 / 10208
EXP : 0
我使用的是18f8622在configure設定內有一個 stack overflow reset enable的功能。 我想問一下、因為在測試一段時間後常常會發生reset的問題、在改變了stack size的大小後、只有發生過一次。 不過有一個問題是在 STATUS REGISTER 內有一個OV的bit。 請問一下stack overflow reset enable是參考這個bit嗎? 還有就是改變了stack size的大小但OVbit的判斷值不會、還是會在超過原設定的地方就會reset呢? 在測試stack的使用最大範圍抓到的值是d8我只在中斷內判斷FSR1的數值做判斷、使用上會不會過大了?
發表於: 2009/4/23 18:27
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.