QNX中断请教

我的ARM 有两个中断控制器,管理64个中断源,在中断初试化我是这样做的:第一个:VECT_BASE: _NTO_INR_CLASS_EXTERNAL,NUM_VECTOR:32,CASCADE_VECTOR:_INTO_INIR_SPARE.第二个是这样:VECT_BASE: 32,NUM_VECTOR:32,CASCADE_VECTOR:_INTO_INIR_SPARE.QNX运行在执行DISPLAY_MSG welcome …时候输出W后就执行shutdown[0,0].不知道什么原因,可能是因为在INTERRRUPTATTACH()时候挂接一个52号的中断.我问一下是不是在中断挂接的时候会不回52-32=20传给中断的CALLOUT ,各位大虾帮帮我

kernel会自动减掉vector base,然后传给callout.

谢谢comquter!我的uart 中断号是52.现在问题是我在devc-ser 用52 号挂接的时候,QNX在执行display_msg welcom 的时候输出w后就执行shutdown[0,0].当我用20号挂接时候,QNX在QNX在执行display_msg welcom 的时候输出we两个字母后就不输出了.我想问一下是什么原因.谢谢!

这很难说.
假设你的中断CALLOUT都是好的,问题在UART驱动里,你看看发送中断里有没有什么不合理的操作.你可以将shutdown信息帖上来,这样问题好找.
中断20不会宕机可能是因为你拿不到中断,52会宕机有可能是在中断HANDLER中作了违法操作.当然这都是在你的CALLOUT没有问题的前提下推测.

init_qtime ok X\CR\LFShutdown[0,0] S/C/F=10/1/5 C/D=fe005d7c/fe048500 state(77)= lock exit specret 7\CR\LF[0]PID-TID=2-1? P/T FL=00001010/81000000 “F:/myddk/ddk-6.2.1/char/src/hardware/devc/serprimecell/arm/le/devc-serprimecell”\CR\LFarmle context[ff7f4920]:\CR\LF0000: 00000002 fe01fce8 80000013 fe046338 ff7fd440 fe0480c4 00000003 00000002\CR\LF0020: 0005010a 00000037 00000002 ff7f4a0c 80000013 ff7f4964 fe01fc14 ff7f4954\CR\LF0040: 80000093\CR\LFinstruction[ff7f4954]:\CR\LF64 49 7f ff 14 fc 01 fe 54 49 7f ff 93 00 00 80 02 00 00 00 00 00 00 00 f8 48 \CR\LFstack[ff7f4964]:\CR\LF0000: 00000002 00000000 fc4048f8 a0000013 ff7f49a8 0010d0f4 00000058 01800000\CR\LF0020: 00000001 00000800 00000002 ff7f4a0c ff7f4a10 ff7f49a8 ff7f4a38 ff7f4994\CR\LF0040: 60000093 ff7f4020 00000000 fc4048f8 a0000013 ffffffff 0010d0f4 00000058\CR\LF0060: 01800000 00000001 00000800 00000002 ff7f4a0c ff7f4a10 ff\NUL\x80
谢谢comquter.上面init_qtime ok后面的X就是build 里面的display_msg 后面的第一个字母了.执行后就shutdown

我的两个中断没有联系的,我的QNX是6.2.1的

现在问题能够输出完整的display_msg 的全部内容了,但是出现了,unable acces dev-ser 的错误提示

shutdown说操作有alignment问题.
你的两级中断有没有联系?第二级是不是挂在第一级上?
没有CPU的文档很难说你的代码有什么问题.
你用的是6.2.1?

谢谢comquter,现在我的QNX 在display_msg 没有问题了;但是在QNX运行dispaly_msg 后我通过串口发ls 命令,QNX好象没有反映,至少我在串口上看不到任何反馈信息.在bulid里面/dev/console=/dev/ser1 就可以通过串口调试QNX的shell?display_msg 和调试命令的串口同一个可以吗?

display_msg 和调试命令的串口可以用同一个.
在bulid里面要加/dev/console=/dev/ser1,不要忘了reopen
devc-serxxx -e -F
reopen
display_msg Welcome to Neutrino on the xxx Board
-e EDIT模式 -F disable hardware flow control
主机的hardware flow control也要关掉.

在buid 里面我
display_msg Welcome to Neutrino on the xxx Board
然后
devc-serxxx -e -F
reopen
display_msg Welcome to Neutrino on the xxx Board

但串口只能看到第一次display_msg 的内容
是不是我的devc-serxxx有问题啊

很难说,有可能是串口驱动,也有可能是中断CALLOUT.
第一个display_msg用的是DEBUG_CALLOUT,不用中断.
你最好确认中断CALLOUT没问题后再作其它事情.

在buid 里面我
display_msg Welcome to Neutrino on the xxx Board
然后
devc-serxxx -e -F
reopen
display_msg Welcome to Neutrino on the xxx Board
改了一下CALLOUT
现在是第一次display_msg 的内容可以全部显示在串口上
reopen 后的display_msg 只能显示We两个字母就没有反映
看了一下callout实在看不错什么错误
我想问一下怎么判断我的callout 对错啊
怎么样可以测试一下

shell使用ksh,不启动串口驱动,不reopen,这样的话只有OS timer中断是工作的.
如果DEBUG_CALLOUT里有poll_key的话,输入应该是工作的.若没有poll_key,你可以在display_msg后加"pidin -l"看看是不是每隔一秒钟有输出,有定期舒畅的话说明中断是好的,若间隔不是一秒的话说明时钟频率给的不对.

在display_mg 后面加pidin -l 出现了unablestart pidin 我的callout 有问题?

你的build file有问题,可能没有pidin,也可能路径不对.

shell 中使用KSH 报unable start to ksh 使用SH没有出现这个错误

build file贴上来.

[image=0x00700000]
#[ram=0x00000000]
[virtual=armle,binary] .bootstrap = {
startup-integrator
PATH=/proc/boot procnto -vv
}
[+script] .script = {

Programs require the runtime linker (ldqnx.so) to be at a fixed location

procmgr_symlink …/…/proc/boot/libc.so.2 /usr/lib/ldqnx.so.2

Initialise the console

devc-serprimecell -e -F &
reopen &
display_msg Welcome to to Neutrino

pidin -l &
slogger &

Start some common servers

pipe &

Start the main shell

[+session] ksh &

}

Redirect console messages

[type=link] /dev/console=/dev/ser1

Shared libaries

libc.so

Executables

[data=copy]

devc-serprimecell
pipe
pidin
ls
cat
slogger
sloginfo
ksh=fesh


用上面的build 我的串口输出 Welcome to to Neutrino pid t
把pidin -l屏蔽了串口输出 We
不启动串口驱动,不reopen 的时候
串口每隔一秒钟有输出的

你用的还是fesh,需将"ksh=fesh" 该为"ksh".
你的CALLOUT应该没有问题,起码有TIMER的那一级是好的.查查串口驱动吧.