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

論壇索引


Board index » All Posts (taru)




Re: Stack overflow reset Enable問題
#21
高級會員
高級會員


在程式的問題方面、有幾個問題:
假設我在主程式的時間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
頂部


Stack overflow reset Enable問題
#22
高級會員
高級會員


我使用的是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
頂部


Re: 關於stack size的幾個問題
#23
高級會員
高級會員


版大你好、經過測試在讀取FSR1已可以了解、堆疊指標目前的位置、還有幾個小小的疑問。
一、如果沒想抓曾經使用的最大值、我是想說另外編寫一個變數做存取的比軟如果FSR1大於變數值就將FSR1存入變數來做測試、不知道是否可行。
二、如果上述的方法可行的話、在程式內是在中斷High level還是中斷low level內的堆疊會用到最多?還是那裡會是最多的地方呢?
三、還有一個堆疊存取說明的七層、因第八層是中斷在用的、如果我的堆疊區變大了是不是在堆疊未overflow都可以一直使用下去呢?
四、如果在主程式下已經在第三層了、到了中斷又call了三層的副程式、那就是六層了嗎?是不是這樣算丫?
例子:
void callFunction1(char *data)
{
callFuncton2(data);
}
void callFunction2(char *data1)
{
printf("data1");
}
void main(void)
{
char cc;
callFunction1(&cc);
}
上面的程式就算是三層了嗎?

發表於: 2009/4/23 9:52
頂部


關於ICD2 debig mode 的問題
#24
高級會員
高級會員


我在下面網址的討論看到的問與答之中:
http://www.microchip.com.tw/modules/n ... ost_id=6721#forumpost6721
在裡面有說到
在debig的時候要用i.lkr、如果我在程式用的lkr檔是copyl出來另外存放的、那我在debig mode的時候他是用什麼lkr檔呢?
因為我內設的lkr內並沒有debig的位址宣告。

發表於: 2009/4/22 14:13
頂部


關於stack size的幾個問題
#25
高級會員
高級會員


我在下面網址看到的問與答
http://www.microchip.com.tw/modules/n ... t_id=11007#forumpost11007
內容是:
我使用18F4550 須將stack 闊展到384
將 .lkr 內容相關部份修改為如下
DATABANK NAME=pgr2 START=0x200 END=0x3F3

STACK SIZE=0x180 RAM=pgr2

可是執行時發現還是在 256 範圍內
超過的部份從 0x200 開始覆蓋\r

請問修改部份有錯嗎
STACK SIZE要如何才能超過 0x100
thanks!!


請問
一:在修改STACK SIZE後我要怎麼裀道他真正運行的範圍到底跑到多少呢?有沒辦法知道現在stack使用的數量是多少呢?
二:因為我在stack overflow reset enable是開啟的、在reset control register內有reset發生原因的旗標、請問在stack overflow reset有旗標可以查尋嗎?

發表於: 2009/4/22 14:04
頂部


Re: mcp2515 應用的問題
#26
高級會員
高級會員


我測試的時候都是發送端當機。謝謝

發表於: 2008/11/13 15:28
頂部


mcp2515 應用的問題
#27
高級會員
高級會員


我設定好mcp2515後在做測試的一些問題:
一、測試方法device當接收到can bus的訊息後、將接收到的訊息回傳。
二、測試程式、發送訊息、每次的data資料+1、比對回覆的訊息相同、發送下一筆資料。
在沒有任何delay的狀況下常會發生當機的問題、(用模擬器也一樣)但在發送前delay10ms後就沒有發生message error interrupt也沒有造成當機的問題。
有人可以告訴我為什麼嗎?

發表於: 2008/11/13 11:42
頂部


Re: mcp2515 設定SJW參數問題。
#28
高級會員
高級會員


在誤差小於sjw時做hard SYNCHRONIZATION、在大於sjw做RESYNCHRONIZATION那是不是以sjw的tq數值為單位呢?

發表於: 2008/11/6 14:43
頂部


mcp2515 設定SJW參數問題。
#29
高級會員
高級會員


在dtatsheet中說明同步有兩種:hand Synchronization 跟
resynchronization。
Phase Errors
• e = 0 if the edge lies within SYNCESEG.
• e > 0 if the edge lies before the SAMPLE POINT
(TQ is added to PhaseSeg1).
• e < 0 if the edge lies after the SAMPLE POINT of
the previous bit (TQ is subtracted from
PhaseSeg2).
上面說明增加ps1時為單位為tq、減少ps2單位也為tq
但下面的述序、在誤差小於sjw時、做hand Synchronization
大於sjw時最大到只增加到sjw的tq單位或減少sjw的tq單位
5.2.2.2 No Phase Error (e = 0)
If the magnitude of the phase error is less than or equal
to the programmed value of the synchronization jump
width, the effect of a resynchronization is the same as
that of a hard synchronization.
5.2.2.3 Positive Phase Error (e > 0)
If the magnitude of the phase error is larger than the
synchronization jump width and, if the phase error is
positive, phase segment 1 is lengthened by an amount
equal to the SJW.
5.2.2.4 Negative Phase Error (e < 0)
If the magnitude of the phase error is larger than the
resynchronization jump width and the phase error is
negative, phase segment 2 is shortened by an amount
equal to the SJW.
請問在位移時到底是以什麼為單位呢?

發表於: 2008/11/5 10:25
頂部


Re: can bus 網路MCP2515應用
#30
高級會員
高級會員


我裝的硬體是mcp2515的device加上can drive(max3051) 在硬體的角度上來說、加上終端電阻才能動作、應該是在can drive 上的阻抗批配、但是我量測的地方是在mcp2515的can tx的傳送訊號就有問題了、就算沒有電阻訊息也應該能傳送出去、只是有可能接收不到、而不至於完全不能發送正確的訊號、還是這是can bus網路的機制呢?

發表於: 2008/10/30 14:21
頂部



« 1 2 (3) 4 5 6 ... 10 »



:::

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

教育訓練中心

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