在上面任务调用中,显示相关菜单,在这执行过程中每个菜单中所执行相应的功能,其它的都没有问题,当执行以下程序时 else if (keynum == KEY_F2) // 累加 { weightflag |= ADDFLAG; //设置累加标志位. CLRDISP(); } 后会设置一个标志位。
然后在任务中会执行disp_weightdata(0);这个程序。以下为该程序的内容,该程序会根据刚才的标志位进行相应的功能选择。这时会执行SPI的相关操作,执行完成后回到任务中,然后执行 keynum = (uint8)(uint32)OSMboxPend(KeyMbox,100,&err); // 等待按键,超时退出.
这一语句,这时CPU会进入硬件失效中断,中断号为-1,中断向量为0x0000000c。 而假如执行了SPI的相关操作,不让CPU执行keynum = (uint8)(uint32)OSMboxPend(KeyMbox,100,&err); // 等待按键,超时退出. 这一语句,CPU不会进入硬件失效中断。望大家帮忙解决一下问题所在。
void disp_weightdata(uint8 xsno) { if ((weightflag & ADDFLAG) == ADDFLAG) // 有累加数据 { getDataFromMCU("重",HZ11_12); disp_hz(WEIGHT_X2*8,WEIGHT_Y2,hzcode);
// getDataFromMCU("量",HZ11_12); // disp_hz(WEIGHT_X2*8+12,WEIGHT_Y2,hzcode); // getDataFromMCU("(",ASC6_12); // disp_hz(WEIGHT_X2*8+23,WEIGHT_Y2,hzcode); // getDataFromMCU("吨",HZ11_12); // disp_hz(WEIGHT_X2*8+28,WEIGHT_Y2,hzcode); // getDataFromMCU(")",ASC6_12); // disp_hz(WEIGHT_X2*8+39,WEIGHT_Y2,hzcode); // // getDataFromMCU("单",HZ11_12); // disp_hz(WEIGHT_X2*8+50,WEIGHT_Y2,hzcode); // getDataFromMCU("价",HZ11_12); // disp_hz(WEIGHT_X2*8+62,WEIGHT_Y2,hzcode); // getDataFromMCU("(",ASC6_12); // disp_hz(WEIGHT_X2*8+73,WEIGHT_Y2,hzcode); // getDataFromMCU("元",HZ11_12); // disp_hz(WEIGHT_X2*8+78,WEIGHT_Y2,hzcode); // getDataFromMCU("/",ASC6_12); // disp_hz(WEIGHT_X2*8+90,WEIGHT_Y2,hzcode); // getDataFromMCU("吨",HZ11_12); // disp_hz(WEIGHT_X2*8+96,WEIGHT_Y2,hzcode); // getDataFromMCU(")",ASC6_12); // disp_hz(WEIGHT_X2*8+107,WEIGHT_Y2,hzcode);
} else // 没有累加数据的显示 { lcdset(WEIGHT_X1,WEIGHT_Y1,FONT11,FONTZC); ShowText("重量:"); lcdset(WEIGHT_X1+6,WEIGHT_Y1,FONT11,FONTZC); disp_data(weightdata[0],0x24); ShowText("(吨)"); lcdset(WEIGHT_X1,WEIGHT_Y1+25,FONT11,FONTZC); ShowText("单价:"); lcdset(WEIGHT_X1+6,WEIGHT_Y1+25,FONT11,FONTZC); disp_data(unitprice,0x51); ShowText("(元/吨)"); lcdset(WEIGHT_X1,WEIGHT_Y1+50,FONT11,FONTZC); ShowText("单价:"); lcdset(WEIGHT_X1+6,WEIGHT_Y1+50,FONT11,FONTZC); disp_data(everyprice[0],0x51); ShowText("(元)"); } } |