execution is suspended because of error错误的中文意思就是“由于出现错误,程序暂停执行”
execution is suspended because of error错误的中文意思就是“由于出现错误,程序暂停执行”
通过USB Blaster下载时发生的错误,无法Debug。 google了好多,结果似乎并不多,看来遇到这个问题的同学很少,在niosforum与alteraforum上大多回答都是说是USB Blaster的问题。换了几个USB Blaster可是问题依旧。 Altera的帮助文档上面也有相关解决方法,可是没有用哎。
其实是修改的例子程序,不是我的。
不过第一次在UCOS-II上面跑程序,还是比较激动的,发出来大家看看撒~
#include <stdio.h>
#include "includes.h"
#include "system.h"
#include<io.h>
/* Definition of Task Stacks */
#define TASK_STACKSIZE 2048
OS_STK task1_stk[TASK_STACKSIZE];
OS_STK task2_stk[TASK_STACKSIZE];
/* Definition of Task Priorities */
#define TASK1_PRIORITY 1
#define TASK2_PRIORITY 2
/* Prints "Hello World" and sleeps for three seconds */
void task1(void* pdata)
{
while (1)
{
IOWR(PIO_BASE,0,0x5);
OSTimeDlyHMSM(0, 0, 3, 0);
IOWR(PIO_BASE,0,0xa);
OSTimeDlyHMSM(0, 0, 3, 0);
}
}
/* Prints "Hello World" and sleeps for three seconds */
void task2(void* pdata)
{
while (1)
{
printf("Hello from task2\n");
OSTimeDlyHMSM(0, 0, 8, 0);
}
}
/* The main function creates two task and starts multi-tasking */
int main(void)
{
/*
OSTaskCreateExt(task2,
NULL,
(void *)&task2_stk[TASK_STACKSIZE],
TASK2_PRIORITY,
TASK2_PRIORITY,
task2_stk,
TASK_STACKSIZE,
NULL,
0);
*/
OSTaskCreateExt(task1,
NULL,
(void *)&task1_stk[TASK_STACKSIZE],
TASK1_PRIORITY,
TASK1_PRIORITY,
task1_stk,
TASK_STACKSIZE,
NULL,
0);
OSStart();
return 0;
}
首先要制作组件,估计下面这个程序是最简单的了。
代码如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity alontest is
port
(
clk : in std_logic;
en : in std_logic;
indata: in std_logic_vector(7 downto 0);
outdata: out std_logic_vector(7 downto 0)
);
end alontest;
architecture one of alontest is
begin
process(clk)
begin
if en = '1' then
outdata<=indata;
else
outdata<="00000000";
end if;
end process;
end one;
在SOPC里面设置好接口,继续添加cpu和一个片上的memory即可。够简单吧~
组件cpu完成之后,在Quartus分配好相应管脚,跑一下。下载到目标板。
下面是在Nios里面的代码:
#include "system.h"
#include <io.h>
#include "alt_types.h"
int main (void) __attribute__ ((weak, alias ("alt_main")));
int alt_main (void)
{
while(1)
{
IOWR(ALONTEST_INST_BASE, 1, 0xff);
}
return 0;
}
这就是传说中的一句话电灯吗?哈哈。。。 。。。
完全是按照模板做的,还好一次成功了。
下面是SOPC Builder的核:
Nios II Run了之后成功的出现下面的信息:
Task2 received the message: 19 in mailbox 2
Task2 incremented the message and placed it into mailbox 3
Task3 received the message: 20 in mailbox 3
Task3 incremented the message and placed it into mailbox 1
Task1 received the message: 21 in mailbox 1
Task1 incremented the message and placed it into mailbox 2
错误信息如下:
Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Pausing target processor: not responding.
Resetting and trying again: OK
Initializing CPU cache (if present)
OK
Downloading 02000000 ( 0%)
Downloaded 53KB in 0.8s (66.2KB/s)
Verifying 02000000 ( 0%)
Verify failed between address 0x2000000 and 0x200D3FF
Leaving target processor paused
这个不成功的原因应该就是相位问题了,既然PLL不工作,就想别的办法了。
另外,真OO无双在博客里面提到过“Leaving target processor paused”这个错误,他也提到了解决办法,我想他的这个问题不适合我目前的情况哎。
真OO无双地址:http://www.cnblogs.com/oomusou/archive/2007/12/01/979534.html
他的版本太老了,嘿嘿。
Nios II的“Hello World!”
#include "sys/alt_stdio.h"
int main()
{
alt_putstr("Hello from Nios II!\n");
/* Event loop never exits. */
while (1);
return 0;
}
SOPC只需要最简单的配置,加上cpu,加上onchip_mem,还有就是不要忘记加上jtag_uart。
具有Avalon接口的JTAG UART核是在PC主机和FPGA上的SOPC Builder系统间进行串行通信的一种实现方式。JTAG UART核在许多设计中用来替代RS-232完成与PC主机的字符输入/输出。JTAG UART核提供了一个简单的寄存器映像的Avalon接口,该接口对软件开发人员是透明的,主外设通过读/写控制和数据寄存器与JTAG UART核通信。
JTAG UART核使用FPGA内嵌的JTAG电路,PC机通过FPGA上的JTAG专用引脚对核进行访问,且通过JTAG下载电缆与FPGA连接,例如USB-Blaster电缆。Altera提供JTAG的软件支持。对于Nios Ⅱ处理器,HAL系统库中包含该核设备的驱动程序,允许使用ANSI C标准库stdio.h访问JTAG UART核。对PC主机,Altera提供JTAG终端软件来管理PC机与目标系统的连接;对JTAG数据流解码和在屏幕上显示字符。
JTAG UART核是SOPC Builder内部集成的模块,很容易集成到SOPC Builder创建的系统中。
