This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/MSP430FR5989:对于大代码存储器模型,MSP430编译器忽略__均匀_IN_RANGE

Guru**** 2524550 points
Other Parts Discussed in Thread: MSP430FR5989

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/590022/compiler-msp430fr5989-msp430-compiler-ignores-__even_in_range-for-large-code-memory-model

部件号:MSP430FR5989

工具/软件:TI C/C++编译器

您好,

在UART ISR中,我使用以下代码:

开关(__ent_in_range(iv, USI_UART_UCTXCPTIFG)){
	CASE USI_NONE:
		Break;
	CASE USI_UART_UCRXIFG://
		代码
		中断;
	CASE UART_UART_UCTXIFG://
		代码
		中断;
	CASE USI_SCI_SCI_UCSTIFG:
		中断;
	CASE UCP_UART_DEFAULT
					
		
	
		
		

如果我使用小代码内存模型选项编译此代码,我将获得结果优化版本,类似于:

005cb6:521.0036万E Add.W &USI_UART_UCTXCPTIFG,PC
005cba:3C23 JMP ($C$L9)
005cbc:3C1E JMP ($C$L8) 
(...)

如果我使用大代码内存模型,则我获得"正常"开关版本:

MOV.W &USI_UART_UCTXCPTIFG,R15
TST.W R15
JEQ ($C$L7)
DECD.W R15
JEQ ($C$L6)
DECD.W R15
JEQ ($C$L5)
DECD.W R15 
(...)

是否可以强制编译器使用优化版本?

我发现MSP低功耗微控制器论坛中也有类似的主题,但没有答案。

此致,

Mateusz

PS。 对于可能出现的语言错误,我提前表示歉意。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Mateusz Gzella 说:
    如果我使用大代码内存模型,则我获得"正常"开关版本:[/QUOT]

    不幸的是,我无法再现这一结果。  请按照以下步骤提交测试案例。

    1. 使用problem switch语句预处理源文件
    2. 将其附加到您的下一篇文章中
    3. 指示所使用的编译器(而不是CCS)的版本
    4. 准确显示编译器看到的所有生成选项

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我为MSP430FR5989创建了一个空项目,并输入了以下主要代码:

    #include <MSP430.h>
    #include <stdint.h>
    静态易失性结构{uint16_t
    	txCnt;
    	uint16_t rxCnt;
    	uint16_t txCompletedCnt;
    } gUart;
    
    #if defined(__TI_Compiler_version__)|| defined(__IAR_systems_ICC__)
    #void ISR_Elim_USI__I_Is_Isr_Is_vector
    
    
    
    
    
    #endif
    {//
    	uint16_t iv;//
    	iv = UCA1IV;
    //	switch (__bize_in_range(iv, USCI_UART_UCTXCPTIFG)){
    	switch (__偶 数_in_range(UCA1IV, USCI_UTT_UCTXCPTIFG)){
    	CASE USCI_RX_UCD_NONE_UART; UCD_UCD_UCD_UCD_UgIFG; CAST_UCD_UCA.UCA_UCA_UCA_UCA.UCAST_UST_UCA.UCA_UCA.UCA_UCA.UCA_UCA.UCA_UCA_
    		
    	
    		
    		
    	
    		
    		
    	CASE USI_UART_UCSTIFG:
    		Break;
    	CASE USI_UART_UCTXCPTIFG:
    		++gUart.txt CompletedCnt;
    		break;
    	default:
    		__never执行();
    		break
    	;}
    }
    
    int main(void){
    WDTCTL = WDTPW | WDTHOLD;	//停止看门狗计时
    	
    	器返回0;
    }
    
    
    

    编译器版本16.9 .2.LTS,编译命令:

    c:/ti/Ccsv7/tools/compiler/ti-CGT-MSP430_SP4.LTS/bin/cl430" 16.9 -vmspx --data_model=restricted -O4 --opt_for speed=4 --use_HW_bump=F5 --include_path="C:/ccsilit_base/comparticle=-workstatel=-ccup_sp-workstatel_c=-msp_workstatel_works=-us_workse_c_workse_c=-msp_workstatel_workse_c=-up_workse_c=-msp_worksilicle=-up_workref_ginsp_workse_c_c_workse_config_c=-works=-updiminsp_c_c_c=-upf_workref="-worksilicle=-workse_config_ginsp_ginsp_c_workstatel=-workstatel_c_c_works=-works=-up_gf_gf_works 16.9 

    e2e.ti.com/.../6661.main.pp.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您提交测试案例。  我可以再现同样的结果。  我在 SDOWP系统中提交了CodeGen-2213以解决此问题。  此条目不报告编译器中的缺陷,但要求改进编译器的输出。  欢迎您使用我签名中下面的SDOWP链接进行关注。

    谢谢,此致,

    -George