⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucos-ii_v2_1_0.tcl

📁 μC/OS-II and the Xilinx MicroBlaze
💻 TCL
📖 第 1 页 / 共 4 页
字号:
    set task_create_en [xget_value $ucos_handle "PARAMETER" "OS_TASK_CREATE_EN"]
    puts $config_file [format "#define OS_TASK_CREATE_EN         %s      /*     Include code for OSTaskCreate()                          */" $task_create_en]
    set task_create_ext_en [xget_value $ucos_handle "PARAMETER" "OS_TASK_CREATE_EXT_EN"]
    puts $config_file [format "#define OS_TASK_CREATE_EXT_EN     %s      /*     Include code for OSTaskCreateExt()                       */" $task_create_ext_en]
    set task_del_en [xget_value $ucos_handle "PARAMETER" "OS_TASK_DEL_EN"]
    puts $config_file [format "#define OS_TASK_DEL_EN            %s      /*     Include code for OSTaskDel()                             */" $task_del_en]
    set task_name_size [xget_value $ucos_handle "PARAMETER" "OS_TASK_NAME_SIZE"]
    puts $config_file [format "#define OS_TASK_NAME_SIZE         %s     /*     Determine the size of a task name                        */" $task_name_size]
    set task_profile_en [xget_value $ucos_handle "PARAMETER" "OS_TASK_PROFILE_EN"]
    puts $config_file [format "#define OS_TASK_PROFILE_EN        %s      /*     Include variables in OS_TCB for profiling                */" $task_profile_en]
    set task_query_en [xget_value $ucos_handle "PARAMETER" "OS_TASK_QUERY_EN"]
    puts $config_file [format "#define OS_TASK_QUERY_EN          %s      /*     Include code for OSTaskQuery()                           */" $task_query_en]
    set task_suspend_en [xget_value $ucos_handle "PARAMETER" "OS_TASK_SUSPEND_EN"]
    puts $config_file [format "#define OS_TASK_SUSPEND_EN        %s      /*     Include code for OSTaskSuspend() and OSTaskResume()      */" $task_suspend_en]
    set task_sw_hook_en [xget_value $ucos_handle "PARAMETER" "OS_TASK_SW_HOOK_EN"]
    puts $config_file [format "#define OS_TASK_SW_HOOK_EN        %s      /*     Include code for OSTaskSwHook()                          */\n" $task_sw_hook_en]

    puts $config_file "                                         /* --------------------- TIME MANAGEMENT ---------------------- */"
    set time_dly_hmsm_en [xget_value $ucos_handle "PARAMETER" "OS_TIME_DLY_HMSM_EN"]
    puts $config_file [format "#define OS_TIME_DLY_HMSM_EN       %s      /*     Include code for OSTimeDlyHMSM()                         */" $time_dly_hmsm_en]
    set time_dly_resume_en [xget_value $ucos_handle "PARAMETER" "OS_TIME_DLY_RESUME_EN"]
    puts $config_file [format "#define OS_TIME_DLY_RESUME_EN     %s      /*     Include code for OSTimeDlyResume()                       */" $time_dly_resume_en]
    set time_get_set_en [xget_value $ucos_handle "PARAMETER" "OS_TIME_GET_SET_EN"]
    puts $config_file [format "#define OS_TIME_GET_SET_EN        %s      /*     Include code for OSTimeGet() and OSTimeSet()             */" $time_get_set_en]
    set time_tick_hook_en [xget_value $ucos_handle "PARAMETER" "OS_TIME_TICK_HOOK_EN"]
    puts $config_file [format "#define OS_TIME_TICK_HOOK_EN      %s      /*     Include code for OSTimeTickHook()                        */\n" $time_tick_hook_en]

    puts $config_file "#if     OS_VERSION >= 281"
    puts $config_file "                                         /* -------------------- TIMER MANAGEMENT ---------------------- */"
    set tmr_en [xget_value $ucos_handle "PARAMETER" "OS_TMR_EN"]
    puts $config_file [format "#define OS_TMR_EN                 %s      /* Enable (1) or disable (0) code generation for TIMERS         */" $tmr_en]
    set tmr_cfg_max [xget_value $ucos_handle "PARAMETER" "OS_TMR_CFG_MAX"]
    puts $config_file [format "#define OS_TMR_CFG_MAX            %s     /*     Maximum number of timers                                 */" $tmr_cfg_max]
    set tmr_cfg_name_size [xget_value $ucos_handle "PARAMETER" "OS_TMR_CFG_NAME_SIZE"]
    puts $config_file [format "#define OS_TMR_CFG_NAME_SIZE      %s     /*     Determine the size of a timer name                       */" $tmr_cfg_name_size]
    set tmr_cfg_wheel_size [xget_value $ucos_handle "PARAMETER" "OS_TMR_CFG_WHEEL_SIZE"]
    puts $config_file [format "#define OS_TMR_CFG_WHEEL_SIZE     %s      /*     Size of timer wheel (#Entries)                           */" $tmr_cfg_wheel_size]
    set tmr_cfg_ticks_per_sec [xget_value $ucos_handle "PARAMETER" "OS_TMR_CFG_TICKS_PER_SEC"]
    puts $config_file [format "#define OS_TMR_CFG_TICKS_PER_SEC  %s     /*     Rate at which timer management task runs (Hz)            */\n" $tmr_cfg_ticks_per_sec]
    puts $config_file "#endif\n"

    set flags_value [xget_value $ucos_handle "PARAMETER" "OS_FLAGS_NBITS"]
    set flags_type "INT8U"
    if {$flags_value == "16"} {
        set flags_type "INT16U"
    }
    if {$flags_value == "32"} {
        set flags_type "INT32U"
    }
    puts $config_file "#if     OS_VERSION < 280"
    puts $config_file [format "typedef %s OS_FLAGS;                 /* Data type for event flag bits (8, 16 or 32 bits)             */" $flags_type]
    puts $config_file "#endif\n"

    puts $config_file "#endif\n"


    close $config_file

    file copy -force $filename ../../include/}

# --------------------------------------# Tcl procedure post_generate## This proc removes _interrupt_handler.o# from libxil.a# --------------------------------------proc post_generate {os_handle} {        set sw_proc_handle [xget_libgen_proc_handle]    set hw_proc_handle [xget_handle $sw_proc_handle "IPINST"]    set procname [xget_value $hw_proc_handle "NAME"]    set proctype [xget_value $hw_proc_handle "OPTION" "IPNAME"]    if {[string compare -nocase $proctype "microblaze"] == 0} {    set procdrv [xget_sw_driver_handle_for_ipinst $sw_proc_handle $procname]    # Remove _interrupt_handler.o from libxil.a for mb-gcc    set archiver [xget_value $procdrv "PARAMETER" "archiver"]    exec bash -c "$archiver -d ../../lib/libxil.a _interrupt_handler.o"
        # Remove _hw_exception_handler.o from libxil.a for microblaze_v3_00_a        set procver [xget_value $hw_proc_handle "PARAMETER" "HW_VER"]        if {[mb_has_exceptions $procver]} {            exec bash -c "$archiver -d ../../lib/libxil.a _hw_exception_handler.o"        }    }}# --------------------------------------# Return true if MB ver 'procver' has # exception handling support# --------------------------------------proc mb_has_exceptions { procver } {        if { ![string compare -nocase $procver "3.00.a"] || ![string compare -nocase $procver "4.00.a"] } {        return true    } else {        return false    }}# --------------------------------------# Return true if MB ver 'procver' has # FPU exception handling support# --------------------------------------proc mb_has_fpu_exceptions { procver } {        if { ![string compare -nocase $procver "4.00.a"] } {        return true    } else {        return false    }}# --------------------------------------# Generate Profile Configuration# --------------------------------------proc handle_profile { os_handle proctype } {    global env    set proc [xget_processor]    set cpu_freq [xget_value $proc "PARAMETER" "CORE_CLOCK_FREQ_HZ"]    if { [string compare -nocase $cpu_freq ""] == 0 } {	puts "WARNING<profile> :: CPU Clk Frequency not specified, Assuming 100Mhz"	set cpu_freq 100000000    }    set filename [file join "src" "profile" "profile_config.h"]         file delete -force $filename    set config_file [open $filename w]    xprint_generated_header $config_file "Profiling Configuration parameters"    puts $config_file "#ifndef _PROFILE_CONFIG_H"    puts $config_file "#define _PROFILE_CONFIG_H\n"        puts $config_file "#define BINSIZE 4"    puts $config_file "#define CPU_FREQ_HZ $cpu_freq"    puts $config_file "#define SAMPLE_FREQ_HZ 100000"    puts $config_file "#define TIMER_CLK_TICKS [expr $cpu_freq / 100000]"        # proctype should be "microblaze" or "ppc405" or "ppc405_virtex4"    switch $proctype {	"microblaze" { 	    # Microblaze Processor.	    puts $config_file "#define PROC_MICROBLAZE 1"	    set timer_inst [xget_value $os_handle "PARAMETER" "profile_timer"]	    if { [string compare -nocase $timer_inst "none"] == 0 } {		# Profile Timer Not Selected		error "ERROR :: Timer for Profiling NOT selected.\nS/W Intrusive Profiling on MicroBlaze requires a opb_timer." "" "mdt_error"	    } else {		handle_profile_opbtimer $config_file $timer_inst	    }	}	"ppc405"  	-	"ppc405_virtex4" {	    # PowerPC Processor	    # - PIT Timer is used for Profiling by default	    puts $config_file "#define PROC_PPC 1"	    set timer_inst [xget_value $os_handle "PARAMETER" "profile_timer"]	    if { [string compare -nocase $timer_inst "none"] == 0 } {		# PIT Timer		puts $config_file "#define PPC_PIT_INTERRUPT 1"		puts $config_file "#define ENABLE_SYS_INTR 1"	    } else {		handle_profile_opbtimer $config_file $timer_inst	    }	}	"default" {error "unknown processor type\n"}    }    puts $config_file "\n#endif"    puts $config_file "\n/******************************************************************/\n"    close $config_file}# - The opb_timer can be connected directly to Microblaze External Intr Pin.# - (OR) opb_timer can be connected to opb_intcproc handle_profile_opbtimer { config_file timer_inst } {    set timer_handle [xget_hwhandle $timer_inst]    set timer_baseaddr [xget_value $timer_handle "PARAMETER" "C_BASEADDR"]    puts $config_file "#define PROFILE_TIMER_BASEADDR [xformat_addr_string $timer_baseaddr "C_BASEADDR"]"    # Figure out how Timer is connected.    set timer_intr [xget_value $timer_handle "PORT" "Interrupt"]    if { [string compare -nocase $timer_intr ""] == 0 } {	error "ERROR<profile> :: Timer Interrupt PORT is not specified" "" "mdt_error"    }     set mhs_handle [xget_handle $timer_handle "parent"]    set intr_port [xget_connected_ports_handle $mhs_handle $timer_intr "sink"]    set intc_handle [xget_handle $intr_port "parent"]    set iptype [xget_value $intc_handle "OPTION" "IPTYPE"]    if { [string compare -nocase $iptype "PROCESSOR"] != 0 } {	# Timer connected to Interrupt controller	puts $config_file "#define TIMER_CONNECT_INTC 1"	puts $config_file "#define INTC_BASEADDR [xget_value $intc_handle "PARAMETER" "C_BASEADDR"]"	set num_intr_inputs [xget_value $intc_handle "PARAMETER" "C_NUM_INTR_INPUTS"]	if { $num_intr_inputs == 1 } {	    puts $config_file "#define ENABLE_SYS_INTR 1"	}	set signals [split [xget_value $intr_port "VALUE"] "&"]	set i 1	foreach signal $signals {	    set signal [string trim $signal]	    if {[string compare -nocase $signal $timer_intr] == 0} {		set timer_id [expr ($num_intr_inputs - $i)]		set timer_mask [expr 0x1 << $timer_id]		puts $config_file "#define PROFILE_TIMER_INTR_ID $timer_id"		puts $config_file "#define PROFILE_TIMER_INTR_MASK [format "0x%x" $timer_mask]"		break	    }	    incr i	}    } else {	puts $config_file "#define ENABLE_SYS_INTR 1"    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -