void bsp_log_bin_ind(s32 str_id, void* ind_data, u32 ind_data_size) { u32 pbuf = 0; u32 buflen = 0; bsp_om_head_s *bsp_om_header = NULL; log_ind_enter_cnt ++; if((NULL == ind_data) ||(0 == ind_data_size) || (ind_data_size > BSP_DIAG_IND_DATA_MAX_LEN)) { return ; } if( TRUE != bsp_om_get_hso_conn_flag()) { return ; } buflen = sizeof(bsp_socp_head_s)+sizeof(bsp_om_head_s)+ind_data_size ; /*获取buf*/ if(bsp_om_buf_sem_take()) { return; } pbuf = bsp_om_get_buf(BSP_OM_SOCP_BUF_TYPE,buflen); if(0 == pbuf) { bsp_om_buf_sem_give(); return ; } /*打包SOCP头*/ PACKET_BSP_SOCP_HEAD(pbuf); bsp_om_header = (bsp_om_head_s*)(pbuf + sizeof(bsp_socp_head_s)); bsp_om_header->om_id = (BSP_STRU_ID_28_31_GROUP_MSP << 28) | (BSP_STRU_ID_16_23_BSP_CMD_IND << 16) |(u16)str_id; memcpy((u8*)bsp_om_header +sizeof(bsp_om_head_s),ind_data,ind_data_size); if(BSP_OK != bsp_om_into_send_list(pbuf,buflen)) { bsp_om_free_buf(pbuf,buflen); } bsp_om_buf_sem_give(); log_ind_exit_cnt ++; }
void cpu_timeout_done(void) { get_task_time(1); if(cpu_info_stru.report_swt == BSP_SYSVIEW_SWT_ON) { if( TRUE == bsp_om_get_hso_conn_flag()) { report_cpu_trace(); } get_task_time(0); bsp_softtimer_add(&cpu_info_stru.loop_timer); } }
void report_sysview_trace(bsp_sysview_type_e data_type) { dump_queue_t *queue_head = NULL; u32 data_size = 0; u32 send_buf_len = 0; u32 q_front; u32 q_maxnum; u32 q_num; BSP_SYS_VIEW_TRACE_STRU *p_sysview_trace_stru = NULL; u32 threshold_size ; if( TRUE != bsp_om_get_hso_conn_flag()) { return ; } if(BSP_SYSVIEW_TASK_INFO == data_type) { threshold_size = task_info_stru.threshold_size; queue_head = (dump_queue_t *)DUMP_TASK_SWITCH_ADDR; } /* 内部接口,由入参保证*/ else { threshold_size = int_lock_stru.threshold_size; queue_head = (dump_queue_t *)DUMP_INTLOCK_ADDR; } q_num = queue_head->num; q_maxnum = queue_head->maxNum; q_front = queue_head->front ; if(0 == q_num) { return ; } /* 每次触发上报最多上报门限值大小*/ if((q_num *sizeof(int)) >= threshold_size ) { data_size = threshold_size; } else { data_size = (q_num *sizeof(int)); } /*不处理回卷指针*/ if((q_front + data_size/sizeof(u32)) >=q_maxnum) { data_size = (q_maxnum - q_front )* sizeof(u32); } /*申请编码通道缓存buf*/ send_buf_len = sizeof(BSP_SYS_VIEW_TRACE_STRU)+data_size ; if(bsp_om_buf_sem_take()) { return; } p_sysview_trace_stru = bsp_om_get_buf(BSP_OM_SOCP_BUF_TYPE,send_buf_len ); if(NULL == p_sysview_trace_stru) { QueueFrontDel(queue_head,data_size/sizeof(int)); bsp_om_buf_sem_give(); return ; } /*打包数据头*/ sysview_trace_packet((u8*)p_sysview_trace_stru,send_buf_len,data_type); /*从dump模块指定地址中获取数据、发送数据到SOCP、更新dump模块队列指针*/ memcpy((u8*)p_sysview_trace_stru +sizeof(BSP_SYS_VIEW_TRACE_STRU),(u8*)(queue_head->data+q_front),data_size); if(BSP_OK == bsp_om_into_send_list((void*)p_sysview_trace_stru,send_buf_len)) { QueueFrontDel(queue_head,data_size/sizeof(int)); g_sysview_debug[data_type].info_send_times++; g_sysview_debug[data_type].info_send_size += data_size; } else { QueueFrontDel(queue_head,data_size/sizeof(int)); bsp_om_free_buf((void*)p_sysview_trace_stru,send_buf_len ); } bsp_om_buf_sem_give(); return ; }
void bsp_trace(bsp_log_level_e log_level, bsp_module_e mod_id,char *fmt,...) { int ret_len; u8 *log_buf = NULL; va_list arglist; s32 _args[6]; s32 i; int flag; if(mod_id >= BSP_MODU_MAX ) { return ; } if(g_mod_peint_level_info[mod_id].print_level > log_level ) { return ; } /* 根据NV项的配置选择打印输出方式*/ if( BSP_LOG_SEND_TO_SHELL == g_om_global_info.om_cfg.nv_cfg.log_switch) { /*lint -save -e530*/ va_start(arglist, fmt); /*lint -restore +e530*/ for(i = 0; i < 6; i++) { _args[i] = va_arg(arglist, s32); } va_end(arglist); flag = intLock(); /* 如果当前处于锁中断或者是中断上下文*/ if(VXWORKS_INT_LOCK_FLAG&flag) { printksync((char*)fmt, _args[0], _args[1],_args[2],_args[3],_args[4],_args[5]); } else { logMsg((char*)fmt, _args[0], _args[1],_args[2],_args[3],_args[4],_args[5]); } intUnlock(flag); } else if(( BSP_LOG_SEND_TO_HSO == g_om_global_info.om_cfg.nv_cfg.log_switch) &&( TRUE== bsp_om_get_hso_conn_flag())) { /* 默认bsp trace 都往串口打印,可以通过NV项控制*/ if(g_dump_cfg.dump_cfg.Bits.log_ctrl == 0) { va_start(arglist, fmt); for(i = 0; i < 6; i++) { _args[i] = va_arg(arglist, s32); } va_end(arglist); flag = intLock(); /* 如果当前处于锁中断或者是中断上下文*/ if(VXWORKS_INT_LOCK_FLAG&flag) { printksync((char*)fmt, _args[0], _args[1],_args[2],_args[3],_args[4],_args[5]); } else { logMsg((char*)fmt, _args[0], _args[1],_args[2],_args[3],_args[4],_args[5]); } intUnlock(flag); } ret_len = BSP_PRINT_BUF_LEN; log_buf = (u8*)bsp_om_get_log_buf((u32)ret_len); if(NULL == log_buf) { g_get_buf_fail++; return; } /*兼容PS上报格式*/ va_start(arglist, fmt); /*lint -save -e119*/ vsnprintf((char *)(log_buf+sizeof(bsp_trace_s)+1), BSP_PRINT_BUF_LEN -sizeof(bsp_trace_s)-1, fmt, arglist); /* [false alarm]:屏蔽Fority错误 */ /*lint -restore*/ va_end(arglist); bsp_log_header_packet(mod_id,log_level,log_buf,(u32)ret_len); /* send data to socp src chan. don't do this if interrupt is locked, because semGive will reschedule task and unlock interrupt. */ flag = intLock(); if(!(VXWORKS_INT_LOCK_FLAG&flag)) { osl_sem_up(&send_task_sem); } intUnlock(flag); } else if(( BSP_LOG_SEND_TO_HSO == g_om_global_info.om_cfg.nv_cfg.log_switch) &&( TRUE != g_om_global_info.hso_connect_flag)) { va_start(arglist, fmt); for(i = 0; i < 6; i++) { _args[i] = va_arg(arglist, s32); } va_end(arglist); flag = intLock(); /* 如果当前处于锁中断或者是中断上下文*/ if(VXWORKS_INT_LOCK_FLAG&flag) { printksync((char*)fmt, _args[0], _args[1],_args[2],_args[3],_args[4],_args[5]); } else { logMsg((char*)fmt, _args[0], _args[1],_args[2],_args[3],_args[4],_args[5]); } intUnlock(flag); } else { } return ; }