UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 23171

8.1 EDK - XMK - XilKernel v3.00a - LwIP などのマルチスレッド デザインで問題が発生する

説明

XilKernel v3.00a のソース ファイルを変更すると、EDK 8.1i リリースを使用した MicroBlaze のマルチスレッド デザインで問題が発生します。 この問題は、IwIP ライブラリを使用した複数の XMK デザインで発生しています。

ソリューション

1

この問題は、最新版の EDK 8.1i サービス パックで修正されています。サービス パックは次のサイトから入手できます。
http://www.xilinx.co.jp/xlnx/xil_sw_updates_home.jsp
この修正は EDK 8.1i サービス パック 2 以降に含まれます。

2

mb-hw.c ファイルを変更して、この問題が解決できます。 このファイルは、次のディレクトリにあります。

$EDK/sw/lib/bsp/xilkernel_v3_00_a/src/src/arch/microblaze/

278 行目に、pit_reset のファンクションが定義されています。 この内容を、次のように変更します。

void pit_reset ()
{
unsigned int control_reg;

// Obtain control register value from PIT device
control_reg = XTmrCtr_mGetControlStatusReg (SYSTMR_BASEADDR, TIMER_COUNTER_0);

// Refresh budget only if a new process is scheduled or if the timer ran out
if (did_resched || timer_need_refresh) {
// Re-load the interval value from load register and reset the interrupt occurred mask
XTmrCtr_mSetControlStatusReg (SYSTMR_BASEADDR, TIMER_COUNTER_0,
control_reg | XTC_CSR_LOAD_MASK | XTC_CSR_INT_OCCURED_MASK);

// Remove the load mask and also enable the timer
XTmrCtr_mSetControlStatusReg (SYSTMR_BASEADDR, TIMER_COUNTER_0,
(control_reg & (~XTC_CSR_LOAD_MASK)) | XTC_CSR_ENABLE_TMR_MASK);
did_resched = 0;
timer_need_refresh = 0;
} else {
// Enable the timer. No need to reset interrupt. That would have been covered by previous conditional
XTmrCtr_mSetControlStatusReg (SYSTMR_BASEADDR, TIMER_COUNTER_0,
(control_reg | XTC_CSR_ENABLE_TMR_MASK));
}
}
AR# 23171
日付 12/15/2012
ステータス アクティブ
種類 一般
このページをブックマークに追加