8.1 EDK  –  XMK  –  XilKernel v3.00a  – 无法在LwIP等多线程设计中运行-Altera-Intel社区-FPGA CPLD-ChipDebug

8.1 EDK – XMK – XilKernel v3.00a – 无法在LwIP等多线程设计中运行

问题描述

对于EDK 8.1i版本,在XilKernel v3.00a中对源文件所做的更改导致MicroBlaze设计不能正确地进行多线程。这已经在使用XMK结合lwIP库的几种设计中展示。

解决/修复方法

最新的EDK 8.1i Service Pack中已修复此问题,可从以下位置获得:

http://www.xilinx.com/xlnx/xil_sw_updates_home.jsp

对“mb-hw.c”文件的简单修改可以解决此问题。该文件可在以下目录中找到:

$ EDK / SW / lib中/ BSP / xilkernel_v3_00_a / src目录/ src目录/拱/ MicroBlaze的/

第278行是pit_reset函数的定义。此功能需要更新为以下内容:

void pit_reset()

{

unsigned int control_reg;

//从PIT器件获取控制寄存器值

control_reg = XTmrCtr_mGetControlStatusReg(SYSTMR_BASEADDR,TIMER_COUNTER_0);

//仅在安排新进程或计时器用完时才刷新预算

if(did_resched || timer_need_refresh){

//从加载寄存器重新加载间隔值并重置中断发生的掩码

XTmrCtr_mSetControlStatusReg(SYSTMR_BASEADDR,TIMER_COUNTER_0,

control_reg | XTC_CSR_LOAD_MASK | XTC_CSR_INT_OCCURED_MASK);

//删除加载掩码并启用计时器

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 {

//启用计时器。无需重置中断。这可以通过先前的条件涵盖

XTmrCtr_mSetControlStatusReg(SYSTMR_BASEADDR,TIMER_COUNTER_0,

(control_reg | XTC_CSR_ENABLE_TMR_MASK));

}

}

请登录后发表评论

    没有回复内容