[Feature][ZXW-65]merged P49 base code
Change-Id: I3e09c0c3d47483bc645f02310380ecb7fc6f4041
diff --git a/ap/build/scripts/trace32/zx297520v3/linux_kmalloc_debug_symbol.cmm b/ap/build/scripts/trace32/zx297520v3/linux_kmalloc_debug_symbol.cmm
new file mode 100755
index 0000000..6271a61
--- /dev/null
+++ b/ap/build/scripts/trace32/zx297520v3/linux_kmalloc_debug_symbol.cmm
@@ -0,0 +1,77 @@
+//**************************************************************************
+//*
+//* Copyright (c) 2016 ZTE Corporation.
+//*
+//**************************************************************************
+// geanfeng
+
+//**************************************************************************
+//* ½Å±¾½âÎöÇøÓò
+//**************************************************************************
+//´´½¨Ò»¸ö´°¿Ú£»
+&width=50.
+&nameWidth=20.
+&fileColumns=1000.
+&fileLines=1000.
+
+area.create trace &fileColumns &fileLines
+area.clear trace
+area.select trace
+
+//´ò¿ªÎļþ£»
+&dir=os.pwd()+"\log_kmalloc"
+if !os.dir(&dir)
+(
+ mkdir &dir
+)
+&file="&dir\result.txt"
+area.open trace &file
+area.view trace
+
+//Èç¹ûT32ÔÚÔËÐÐÒª¶Ïס£»
+if run()
+(
+ break
+)
+
+&node=v.value(kmem_employ_head.next)
+
+&head=v.value(&kmem_employ_head)
+
+while !(&node==&head)
+(
+ &addr=v.value(((struct heap_record*)&node)->addr)
+ &size=v.value(((struct heap_record*)&node)->size)
+ &thread=v.string(((struct heap_record*)&node)->task_name)
+ &i=0
+ &stack=""
+ //&stack_value=v.value(((struct heap_record*)&node)->stack_frame[&i])
+ &stack_value=v.value(((struct heap_record*)&node)->stack_frame[&i])
+ while &i<0x6
+ (
+ if !(&stack_value==0)
+ (
+ //&stack_frame=Y.function(P:&stack_value)
+ //&stack_frame=os.file.name("&stack_frame")
+ &stack_frame=v.string(((struct heap_record*)&node)->stack_frame[&i])
+ &stack="&stack"+"&i:"+"&stack_frame "
+ &i=&i+1
+ &stack_value=v.value(((struct heap_record*)&node)->stack_frame[&i])
+ //&stack_value=v.string(((struct heap_record*)&node)->stack_frame[&i])
+ )
+ else
+ (
+ goto next
+ )
+ )
+next:
+ &size=format.decimal(10., &size)
+ print "node: "+"&node"+" addr: "+"&addr"+" size:"+"&size"+" thread:"+"&thread"+" stack_frame:"+"&stack"
+ &node=v.value(((struct list_head*)&node)->next)
+)
+
+print "allocated kmalloc End-----------------------------"
+
+area.close trace
+ENDDO
+//****ÔËÐнáÊø*****
diff --git a/ap/build/scripts/trace32/zx297520v3/print_os_statistics_irqnr.cmm b/ap/build/scripts/trace32/zx297520v3/print_os_statistics_irqnr.cmm
new file mode 100755
index 0000000..73e5bf6
--- /dev/null
+++ b/ap/build/scripts/trace32/zx297520v3/print_os_statistics_irqnr.cmm
@@ -0,0 +1,648 @@
+//**************************************************************************
+//*
+//* Copyright (c) 2016 ZTE Corporation.
+//*
+//**************************************************************************
+// geanfeng
+
+//**************************************************************************
+//* ½Å±¾½âÎöÇøÓò
+//**************************************************************************
+
+//¶¨Òå¾Ö²¿±äÁ¿
+local &os_time0 &os_time1 &os_time2 &os_time3 &os_time4 &os_time5 &os_time6 &os_time7
+local &os_time_cnt &os_next_time
+local &os_swap_last &os_swap_cnt &os_swap_next
+local &os_irq_start_last &os_irq_start_cnt &os_irq_start_next
+local &os_irq_end_last &os_irq_end_cnt &os_irq_end_next
+
+//for linux
+local &os_softirq_start_last &os_softirq_start_cnt &os_softirq_start_next
+local &os_softirq_end_last &os_softirq_end_cnt &os_softirq_end_next
+local &os_timer_start_last &os_timer_start_cnt &os_timer_start_next
+local &os_timer_end_last &os_timer_end_cnt &os_timer_end_next
+
+local &os_irq_enable &os_softirq_enable &os_timer_enable
+&os_irq_enable=1
+&os_softirq_enable=1
+&os_timer_enable=1
+
+//for tos
+local &os_dsr_start_last &os_dsr_start_cnt &os_dsr_start_next
+local &os_dsr_end_last &os_dsr_end_cnt &os_dsr_end_next
+&os_dsr_enable=0
+
+//´´½¨Ò»¸ö´°¿Ú£»
+&width=20.
+&nameWidth=20.
+&fileColumns=200.
+&fileLines=500.
+
+area.create trace &fileColumns &fileLines
+area.clear trace
+area.select trace
+
+//´ò¿ªÎļþ£»
+&dir=os.pwd()+"\log"
+if !os.dir(&dir)
+(
+ mkdir &dir
+)
+&file="&dir\result.txt"
+area.open trace &file
+area.view trace
+
+//Èç¹ûT32ÔÚÔËÐÐÒª¶Ïס£»
+if run()
+(
+ break
+)
+
+if symbol.exist(init_task)
+(
+ gosub LinuxTrace
+)
+
+if symbol.exist(tos_except)
+(
+ gosub TosTrace
+)
+
+area.close trace
+
+ENDDO
+//****ÔËÐнáÊø*****
+
+//*****************º¯Êý¶¨Òå**********************
+
+; ---------------------------------------------------------
+LinuxTrace:
+local &result
+
+if v.value(g_os_ddr_swapin_statistic)==0
+(
+ RETURN
+)
+
+&os_swap_last=v.value(g_os_ddr_swapin_statistic->index)
+&os_swap_cnt=v.value(sizeof(g_os_ddr_swapin_statistic->statistics)/sizeof(g_os_ddr_swapin_statistic->statistics[0]))
+&os_swap_next=&os_swap_last
+
+if &os_irq_enable==1
+(
+ &os_irq_start_last=v.value(g_os_ddr_irq_start_statistic->index)
+ &os_irq_start_cnt=v.value(sizeof(g_os_ddr_irq_start_statistic->statistics)/sizeof(g_os_ddr_irq_start_statistic->statistics[0]))
+ &os_irq_start_next=&os_irq_start_last
+ &os_irq_end_last=v.value(g_os_ddr_irq_end_statistic->index)
+ &os_irq_end_cnt=v.value(sizeof(g_os_ddr_irq_end_statistic->statistics)/sizeof(g_os_ddr_irq_end_statistic->statistics[0]))
+ &os_irq_end_next=&os_irq_end_last
+)
+else
+(
+ &os_irq_start_next=-1
+ &os_irq_end_next=-1
+)
+
+if &os_softirq_enable==1
+(
+ &os_softirq_start_last=v.value(g_os_ddr_softirq_start_statistic->index)
+ &os_softirq_start_cnt=v.value(sizeof(g_os_ddr_softirq_start_statistic->statistics)/sizeof(g_os_ddr_softirq_start_statistic->statistics[0]))
+ &os_softirq_start_next=&os_softirq_start_last
+ &os_softirq_end_last=v.value(g_os_ddr_softirq_end_statistic->index)
+ &os_softirq_end_cnt=v.value(sizeof(g_os_ddr_softirq_end_statistic->statistics)/sizeof(g_os_ddr_softirq_end_statistic->statistics[0]))
+ &os_softirq_end_next=&os_softirq_end_last
+)
+else
+(
+ &os_softirq_start_next=-1
+ &os_softirq_end_next=-1
+)
+
+if &os_timer_enable==1
+(
+ &os_timer_start_last=v.value(g_os_ddr_timer_start_statistic->index)
+ &os_timer_start_cnt=v.value(sizeof(g_os_ddr_timer_start_statistic->statistics)/sizeof(g_os_ddr_timer_start_statistic->statistics[0]))
+ &os_timer_start_next=&os_timer_start_last
+ &os_timer_end_last=v.value(g_os_ddr_timer_end_statistic->index)
+ &os_timer_end_cnt=v.value(sizeof(g_os_ddr_timer_end_statistic->statistics)/sizeof(g_os_ddr_timer_end_statistic->statistics[0]))
+ &os_timer_end_next=&os_timer_end_last
+)
+else
+(
+ &os_timer_start_next=-1
+ &os_timer_end_next=-1
+)
+
+//³õʼ»¯timeÊýÖµ
+if &os_swap_next==-1
+(
+ &os_time0=-1
+)
+else
+(
+ &os_time0=v.value(g_os_ddr_swapin_statistic->statistics[&os_swap_next].data2)
+)
+if &os_irq_start_next==-1
+(
+ &os_time1=-1
+)
+else
+(
+ &os_time1=v.value(g_os_ddr_irq_start_statistic->statistics[&os_irq_start_next].data2)
+)
+if &os_irq_end_next==-1
+(
+ &os_time2=-1
+)
+else
+(
+ &os_time2=v.value(g_os_ddr_irq_end_statistic->statistics[&os_irq_end_next].data2)
+)
+if &os_softirq_start_next==-1
+(
+ &os_time3=-1
+)
+else
+(
+ &os_time3=v.value(g_os_ddr_softirq_start_statistic->statistics[&os_softirq_start_next].data2)
+)
+if &os_softirq_end_next==-1
+(
+ &os_time4=-1
+)
+else
+(
+ &os_time4=v.value(g_os_ddr_softirq_end_statistic->statistics[&os_softirq_end_next].data2)
+)
+if &os_timer_start_next==-1
+(
+ &os_time5=-1
+)
+else
+(
+ &os_time5=v.value(g_os_ddr_timer_start_statistic->statistics[&os_timer_start_next].data2)
+)
+if &os_timer_end_next==-1
+(
+ &os_time6=-1
+)
+else
+(
+ &os_time6=v.value(g_os_ddr_timer_end_statistic->statistics[&os_timer_end_next].data2)
+)
+
+&os_time_cnt=7.
+&os_next_time=0.
+
+print format.string("Name",32,' ')+" "+"Index"+" "+"Time"+" "+"Exce"
+
+&result=0
+while &result==0
+(
+ gosub LinuxPrintNextLine
+ if ((&os_swap_next==-1)&&(&os_irq_start_next==-1)&&(&os_irq_end_next==-1)&&(&os_softirq_start_next==-1)&&(&os_softirq_end_next==-1)&&(&os_timer_start_next==-1)&&(&os_timer_end_next==-1))
+ (
+ print "END"
+ &result=-1
+ )
+)
+RETURN
+
+; ---------------------------------------------------------
+LinuxPrintNextLine:
+local &time &str &line_index
+
+gosub GetMinTimeIndex &os_time_cnt
+ENTRY &index
+
+if &index==0
+(
+ local &task &addr
+ &task=v.value(g_os_ddr_swapin_statistic->statistics[&os_swap_next].data1)
+ &addr=v.value(&((struct task_struct*)&task)->comm)
+ &str="THREAD: "+data.string(D:&addr)
+ &line_index=&os_swap_next
+ &time=&os_time0
+ gosub GetNextIndex &os_swap_cnt &os_swap_last &os_swap_next
+ ENTRY &os_swap_next
+ if &os_swap_next==-1
+ (
+ &os_time0=-1
+ )
+ else
+ (
+ &os_time0=v.value(g_os_ddr_swapin_statistic->statistics[&os_swap_next].data2)
+ )
+)
+else if &index==1
+(
+ local &irq &addr
+ &irq=v.value(g_os_ddr_irq_start_statistic->statistics[&os_irq_start_next].data1)
+ //&addr=v.value(irq_desc[&irq].action->name)
+ &str="IRQSTA: "+format.DecimalU(1,&irq)+" S"
+ //&str="IRQSTA: "+data.string(D:&addr)+" S"
+ &line_index=&os_irq_start_next
+ &time=&os_time1
+ gosub GetNextIndex &os_irq_start_cnt &os_irq_start_last &os_irq_start_next
+ ENTRY &os_irq_start_next
+ if &os_irq_start_next==-1
+ (
+ &os_time1=-1
+ )
+ else
+ (
+ &os_time1=v.value(g_os_ddr_irq_start_statistic->statistics[&os_irq_start_next].data2)
+ )
+)
+else if &index==2
+(
+ local &irq &addr
+ &irq=v.value(g_os_ddr_irq_end_statistic->statistics[&os_irq_end_next].data1)
+ //&addr=v.value(irq_desc[&irq].action->name)
+ //&str="IRQEND: "+data.string(D:&addr)+" E"
+ &str="IRQEND: "+format.DecimalU(1,&irq)+" E"
+ &line_index=&os_irq_end_next
+ &time=&os_time2
+ gosub GetNextIndex &os_irq_end_cnt &os_irq_end_last &os_irq_end_next
+ ENTRY &os_irq_end_next
+ if &os_irq_end_next==-1
+ (
+ &os_time2=-1
+ )
+ else
+ (
+ &os_time2=v.value(g_os_ddr_irq_end_statistic->statistics[&os_irq_end_next].data2)
+ )
+)
+else if &index==3
+(
+ local &vec &func
+ &time=v.value(g_os_ddr_softirq_start_statistic->statistics[&os_softirq_start_next].data2)
+ &vec=v.value(g_os_ddr_softirq_start_statistic->statistics[&os_softirq_start_next].data1)
+ &func=v.value(softirq_vec[&vec].action)
+ &str="SIRQS: "+symbol.function(P:&func)+" S"
+ &line_index=&os_softirq_start_next
+ &time=&os_time3
+ gosub GetNextIndex &os_softirq_start_cnt &os_softirq_start_last &os_softirq_start_next
+ ENTRY &os_softirq_start_next
+ if &os_softirq_start_next==-1
+ (
+ &os_time3=-1
+ )
+ else
+ (
+ &os_time3=v.value(g_os_ddr_softirq_start_statistic->statistics[&os_softirq_start_next].data2)
+ )
+)
+else if &index==4
+(
+ local &vec &func
+ &time=v.value(g_os_ddr_softirq_end_statistic->statistics[&os_softirq_end_next].data2)
+ &vec=v.value(g_os_ddr_softirq_end_statistic->statistics[&os_softirq_end_next].data1)
+ &func=v.value(softirq_vec[&vec].action)
+ &str="SIRQE: "+symbol.function(P:&func)+" E"
+ &line_index=&os_softirq_end_next
+ &time=&os_time4
+ gosub GetNextIndex &os_softirq_end_cnt &os_softirq_end_last &os_softirq_end_next
+ ENTRY &os_softirq_end_next
+ if &os_softirq_end_next==-1
+ (
+ &os_time4=-1
+ )
+ else
+ (
+ &os_time4=v.value(g_os_ddr_softirq_end_statistic->statistics[&os_softirq_end_next].data2)
+ )
+)
+else if &index==5
+(
+ local &func
+ &time=v.value(g_os_ddr_timer_start_statistic->statistics[&os_timer_start_next].data2)
+ &func=v.value(g_os_ddr_timer_start_statistic->statistics[&os_timer_start_next].data1)
+ &str="TIMERS: "+symbol.function(P:&func)+" S"
+ &line_index=&os_timer_start_next
+ &time=&os_time5
+ gosub GetNextIndex &os_timer_start_cnt &os_timer_start_last &os_timer_start_next
+ ENTRY &os_timer_start_next
+ if &os_timer_start_next==-1
+ (
+ &os_time5=-1
+ )
+ else
+ (
+ &os_time5=v.value(g_os_ddr_timer_start_statistic->statistics[&os_timer_start_next].data2)
+ )
+)
+else if &index==6
+(
+ local &func
+ &time=v.value(g_os_ddr_timer_end_statistic->statistics[&os_timer_end_next].data2)
+ &func=v.value(g_os_ddr_timer_end_statistic->statistics[&os_timer_end_next].data1)
+ &str="TIMERE: "+symbol.function(P:&func)+" E"
+ &line_index=&os_timer_end_next
+ &time=&os_time6
+ gosub GetNextIndex &os_timer_end_cnt &os_timer_end_last &os_timer_end_next
+ ENTRY &os_timer_end_next
+ if &os_timer_end_next==-1
+ (
+ &os_time6=-1
+ )
+ else
+ (
+ &os_time6=v.value(g_os_ddr_timer_end_statistic->statistics[&os_timer_end_next].data2)
+ )
+)
+else
+(
+ print "Unknown Type"
+)
+
+gosub GetMinTime &os_time_cnt
+ENTRY &os_next_time
+
+print format.string("&str",32,' ')+" "+format.DecimalU(8,&line_index)+" "+format.DecimalU(1,&time)+" "+format.DecimalU(1,&os_next_time-&time)
+
+RETURN
+
+; ---------------------------------------------------------
+GetNextIndex:
+ENTRY &cnt &last_index &cur_index
+local &index
+
+if !((&cur_index>=0.)&&(&cur_index<&cnt))
+(
+ RETURN -1
+)
+
+&index=&cur_index+1
+if &index>=&cnt
+(
+ &index=0
+)
+if &index==&last_index
+(
+ &index=-1
+)
+RETURN &index
+
+; ---------------------------------------------------------
+GetMinTimeIndex:
+ENTRY &cnt
+local &i &min_index &min_val
+local &value &index
+
+&i=0.
+&min_index=0.
+&min_val=0xFFFFFFFF
+
+while &i<&cnt
+(
+ &index=string.cut("&i",-1)
+ &&value=&os_time&index
+ if (&value!=-1)&&(&min_val>=&value)
+ (
+ &min_val=&value
+ &min_index=&i
+ )
+ &i=&i+1
+)
+
+RETURN &min_index
+
+; ---------------------------------------------------------
+GetMinTime:
+ENTRY &cnt
+local &i &min_index &min_val
+local &value &index
+
+&i=0.
+&min_index=0.
+&min_val=0xFFFFFFFF
+
+while &i<&cnt
+(
+ &index=string.cut("&i",-1)
+ &&value=&os_time&index
+ if (&value!=-1)&&(&min_val>=&value)
+ (
+ &min_val=&value
+ &min_index=&i
+ )
+ &i=&i+1
+)
+
+RETURN &min_val
+
+; ---------------------------------------------------------
+TosPrintNextLine:
+local &time &str &line_index
+
+
+gosub GetMinTimeIndex &os_time_cnt
+ENTRY &index
+
+if &index==0
+(
+ local &task &addr
+ &task=v.value(g_os_ddr_swapin_statistic->statistics[&os_swap_next].data1)
+ &addr=v.value(&((Cyg_Thread*)&task)->thread_name)
+ &str="THREAD: "+data.string(D:&addr)
+ &line_index=&os_swap_next
+ &time=&os_time0
+ gosub GetNextIndex &os_swap_cnt &os_swap_last &os_swap_next
+ ENTRY &os_swap_next
+ if &os_swap_next==-1
+ (
+ &os_time0=-1
+ )
+ else
+ (
+ &os_time0=v.value(g_os_ddr_swapin_statistic->statistics[&os_swap_next].data2)
+ )
+)
+else if &index==1
+(
+ local &irq &addr
+ &irq=v.value(g_os_ddr_irq_start_statistic->statistics[&os_irq_start_next].data1)
+ &str="IRQSTA: "+format.DecimalU(1,&irq)+" S"
+ &line_index=&os_irq_start_next
+ &time=&os_time1
+ gosub GetNextIndex &os_irq_start_cnt &os_irq_start_last &os_irq_start_next
+ ENTRY &os_irq_start_next
+ if &os_irq_start_next==-1
+ (
+ &os_time1=-1
+ )
+ else
+ (
+ &os_time1=v.value(g_os_ddr_irq_start_statistic->statistics[&os_irq_start_next].data2)
+ )
+)
+else if &index==2
+(
+ local &irq &addr
+ &irq=v.value(g_os_ddr_irq_end_statistic->statistics[&os_irq_end_next].data1)
+ &str="IRQEND: "+format.DecimalU(1,&irq)+" E"
+ &line_index=&os_irq_end_next
+ &time=&os_time2
+ gosub GetNextIndex &os_irq_end_cnt &os_irq_end_last &os_irq_end_next
+ ENTRY &os_irq_end_next
+ if &os_irq_end_next==-1
+ (
+ &os_time2=-1
+ )
+ else
+ (
+ &os_time2=v.value(g_os_ddr_irq_end_statistic->statistics[&os_irq_end_next].data2)
+ )
+)
+else if &index==3
+(
+ local &dsr &addr
+ &dsr=v.value(g_os_ddr_dsr_start_statistic->statistics[&os_dsr_start_next].data1)
+ &str="DSRSTA: "+format.DecimalU(1,&dsr)+" S"
+ &line_index=&os_dsr_start_next
+ &time=&os_time3
+ gosub GetNextIndex &os_dsr_start_cnt &os_dsr_start_last &os_dsr_start_next
+ ENTRY &os_dsr_start_next
+ if &os_dsr_start_next==-1
+ (
+ &os_time3=-1
+ )
+ else
+ (
+ &os_time3=v.value(g_os_ddr_dsr_start_statistic->statistics[&os_dsr_start_next].data2)
+ )
+)
+else if &index==4
+(
+ local &dsr &addr
+ &dsr=v.value(g_os_ddr_dsr_end_statistic->statistics[&os_dsr_end_next].data1)
+ &str="DSREND: "+format.DecimalU(1,&dsr)+" E"
+ &line_index=&os_dsr_end_next
+ &time=&os_time4
+ gosub GetNextIndex &os_dsr_end_cnt &os_dsr_end_last &os_dsr_end_next
+ ENTRY &os_dsr_end_next
+ if &os_dsr_end_next==-1
+ (
+ &os_time4=-1
+ )
+ else
+ (
+ &os_time4=v.value(g_os_ddr_dsr_end_statistic->statistics[&os_dsr_end_next].data2)
+ )
+)
+else
+(
+ print "Unknown Type"
+)
+
+gosub GetMinTime &os_time_cnt
+ENTRY &os_next_time
+
+print format.string("&str",32,' ')+" "+format.DecimalU(8,&line_index)+" "+format.DecimalU(1,&time)+" "+format.DecimalU(1,&os_next_time-&time)
+
+RETURN
+
+; ---------------------------------------------------------
+TosTrace:
+local &result
+
+if v.value(g_os_ddr_swapin_statistic)==0
+(
+ RETURN
+)
+
+&os_swap_last=v.value(g_os_ddr_swapin_statistic->index)
+&os_swap_cnt=v.value(sizeof(g_os_ddr_swapin_statistic->statistics)/sizeof(g_os_ddr_swapin_statistic->statistics[0]))
+&os_swap_next=&os_swap_last
+
+if &os_irq_enable==1
+(
+ &os_irq_start_last=v.value(g_os_ddr_irq_start_statistic->index)
+ &os_irq_start_cnt=v.value(sizeof(g_os_ddr_irq_start_statistic->statistics)/sizeof(g_os_ddr_irq_start_statistic->statistics[0]))
+ &os_irq_start_next=&os_irq_start_last
+ &os_irq_end_last=v.value(g_os_ddr_irq_end_statistic->index)
+ &os_irq_end_cnt=v.value(sizeof(g_os_ddr_irq_end_statistic->statistics)/sizeof(g_os_ddr_irq_end_statistic->statistics[0]))
+ &os_irq_end_next=&os_irq_end_last
+)
+else
+(
+ &os_irq_start_next=-1
+ &os_irq_end_next=-1
+)
+
+if &os_dsr_enable==1
+(
+ &os_dsr_start_last=v.value(g_os_ddr_dsr_start_statistic->index)
+ &os_dsr_start_cnt=v.value(sizeof(g_os_ddr_dsr_start_statistic->statistics)/sizeof(g_os_ddr_dsr_start_statistic->statistics[0]))
+ &os_dsr_start_next=&os_dsr_start_last
+ &os_dsr_end_last=v.value(g_os_ddr_dsr_end_statistic->index)
+ &os_dsr_end_cnt=v.value(sizeof(g_os_ddr_dsr_end_statistic->statistics)/sizeof(g_os_ddr_dsr_end_statistic->statistics[0]))
+ &os_dsr_end_next=&os_dsr_end_last
+)
+else
+(
+ &os_dsr_start_next=-1
+ &os_dsr_end_next=-1
+)
+
+if &os_swap_next==-1
+(
+ &os_time0=-1
+)
+else
+(
+ &os_time0=v.value(g_os_ddr_swapin_statistic->statistics[&os_swap_next].data2)
+)
+if &os_irq_start_next==-1
+(
+ &os_time1=-1
+)
+else
+(
+ &os_time1=v.value(g_os_ddr_irq_start_statistic->statistics[&os_irq_start_next].data2)
+)
+if &os_irq_end_next==-1
+(
+ &os_time2=-1
+)
+else
+(
+ &os_time2=v.value(g_os_ddr_irq_end_statistic->statistics[&os_irq_end_next].data2)
+)
+
+if &os_dsr_start_next==-1
+(
+ &os_time3=-1
+)
+else
+(
+ &os_time3=v.value(g_os_ddr_dsr_start_statistic->statistics[&os_dsr_start_next].data2)
+)
+if &os_dsr_end_next==-1
+(
+ &os_time4=-1
+)
+else
+(
+ &os_time4=v.value(g_os_ddr_dsr_end_statistic->statistics[&os_dsr_end_next].data2)
+)
+
+&os_time_cnt=5.
+&os_next_time=0.
+
+print format.string("Name",32,' ')+" "+"Index"+" "+"Time"+" "+"Exce"
+
+&result=0
+while &result==0
+(
+ gosub TosPrintNextLine
+ if ((&os_swap_next==-1)&&(&os_irq_start_next==-1)&&(&os_irq_end_next==-1)&&(&os_dsr_start_next==-1)&&(&os_dsr_end_next==-1))
+ (
+ print "END"
+ &result=-1
+ )
+)
+
+RETURN
diff --git a/ap/build/scripts/trace32/zx297520v3/readme b/ap/build/scripts/trace32/zx297520v3/readme
index 8f8bade..4b0fa83 100755
--- a/ap/build/scripts/trace32/zx297520v3/readme
+++ b/ap/build/scripts/trace32/zx297520v3/readme
@@ -1,6 +1,6 @@
-£»----------------------------
-£»7520v3
-£»----------------------------
+;----------------------------
+;7520v3
+;----------------------------
1) load(jtag0)
step1: run 7520V3_DDR_1Gb_312.cmm
step2: run linux_297520v3_evb.cmm
@@ -14,4 +14,7 @@
==> 7520Board
==> Jtag Switch Use CMM
==> Switch to PsJtag
-
\ No newline at end of file
+
+
+v3v 线程中断轨迹请使用:print_os_statistics_irqnr.cmm
+v3v kmalloc debug请使用:linux_kmalloc_debug_symbol.cmm
\ No newline at end of file