📄 ucos-ii_v2_1_0.tcl
字号:
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 + -