chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一起單測(cè)引起的項(xiàng)目加載失敗慘案

京東云 ? 來(lái)源:jf_75140285 ? 作者:jf_75140285 ? 2024-08-23 13:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、前言

最近在開發(fā)一個(gè)功能模塊時(shí),在功能自測(cè)階段,通過(guò)使用單測(cè)測(cè)試功能的完整性,在測(cè)試單測(cè)聯(lián)通性使用到靜態(tài)方法測(cè)試時(shí),發(fā)現(xiàn)單測(cè)報(bào)錯(cuò),通過(guò)查閱解決方案發(fā)現(xiàn)需要對(duì)Javaassist包進(jìn)行排包或者升版本處理。通過(guò)排包解決掉單測(cè)報(bào)錯(cuò),在部署項(xiàng)目時(shí)發(fā)現(xiàn)頻繁報(bào)bean注入失敗問(wèn)題,最終定位發(fā)現(xiàn)是因?yàn)?strong>對(duì)Javaassist包排包引起的bean加載失敗。故而對(duì)Javaassist包相關(guān)知識(shí)進(jìn)行學(xué)習(xí)整理文章如下。

單測(cè)相關(guān)報(bào)錯(cuò)信息如下:

Powermock - java.lang.IllegalStateException: Failed to transform class

解決單測(cè)報(bào)錯(cuò)的文章鏈接:

https://stackoverflow.com/questions/32854688/powermock-java-lang-illegalstateexception-failed-to-transform-class

二、問(wèn)題復(fù)現(xiàn)

1、前期準(zhǔn)備

首先使用了Spring框架新建一個(gè)demo,并寫一個(gè)簡(jiǎn)單測(cè)試類對(duì)問(wèn)題進(jìn)行復(fù)現(xiàn)。

UserService的定義:

public interface UserService {
    void save(User user);
}

UserServiceImpl的實(shí)現(xiàn)代碼:

@Service
public class UserServiceImpl implements UserService {
    private UserDao userDao;

    @Autowired
    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void save(User user) {
        userDao.save(user);
    }
}

這里我們使用了Spring框架的@Service@Autowired注解,以便讓Spring框架自動(dòng)裝配UserDao實(shí)例。

但是,在我們的POM文件中,雖然我們添加了對(duì)Spring框架的依賴,但是并沒(méi)有添加Javaassist庫(kù)的依賴。而UserServiceImpl中確實(shí)使用了Javaassist庫(kù)來(lái)進(jìn)行字節(jié)碼操作, UserServiceImpl的具體實(shí)現(xiàn)代碼:

public class UserServiceImpl implements UserService {
    // ...
    private static final String USER_CLASS_NAME = "com.example.User";

    private static final Class USER_CLASS;

    static {
        try {
            USER_CLASS = Class.forName(USER_CLASS_NAME);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

    public void save(User user) {
        try {
            // 創(chuàng)建一個(gè)ClassPool對(duì)象
            ClassPool cp = ClassPool.getDefault();

            // 從ClassPool中獲取一個(gè)CtClass對(duì)象
            CtClass ctClass = cp.get(USER_CLASS_NAME);

            // 獲取無(wú)參構(gòu)造器
            CtConstructor ctConstructor = ctClass.getDeclaredConstructor(new CtClass[]{});

            // 獲取save方法
            CtMethod saveMethod = ctClass.getDeclaredMethod("save");

            // 生成代碼
            saveMethod.insertBefore("{System.out.println("插入代碼前");}");
            saveMethod.insertAfter("{System.out.println("插入代碼后");}");

            // 生成新的字節(jié)碼并裝載到內(nèi)存
            Class targetClass = ctClass.toClass();
            Object instance = targetClass.newInstance();

            // 調(diào)用save方法
            Method method = targetClass.getMethod("save", USER_CLASS);
            method.invoke(instance, user);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

在這段代碼中,我們通過(guò)Javaassist庫(kù)生成了一個(gè)新的字節(jié)碼,并使用反射機(jī)制將其實(shí)例化,并在調(diào)用save()方法前后插入了一些代碼。但是,由于Javaassist庫(kù)缺失,導(dǎo)致項(xiàng)目在啟動(dòng)過(guò)程中無(wú)法正確加載UserServiceImpl的實(shí)例,從而出現(xiàn)了下述錯(cuò)誤信息。

2、報(bào)錯(cuò)信息

在部署程序時(shí)發(fā)現(xiàn),應(yīng)用無(wú)法正常啟動(dòng),并出現(xiàn)如下錯(cuò)誤信息:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService' defined in file [C:workspaceprojecttargetclassescomexampleUserServiceImpl.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.example.UserService]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.example.UserService.()

從錯(cuò)誤信息中我們可以看到,應(yīng)用在創(chuàng)建UserService的實(shí)例時(shí)遇到了問(wèn)題,無(wú)法實(shí)例化成功。

3、解決方案

為了修復(fù)這個(gè)問(wèn)題,我們需要在POM文件中加入對(duì)Javaassist庫(kù)的依賴:


    org.javassist
    javassist
    3.27.0-GA


添加依賴后,重新編譯并部署應(yīng)用程序即可正常運(yùn)行。

三、Javaassist包

1、什么是Javaassist?

Javaassist 是由東京工業(yè)大學(xué)數(shù)學(xué)和計(jì)算機(jī)科學(xué)系的 Shigeru Chiba (千葉滋)教授創(chuàng)造的。Javaassist 作為實(shí)現(xiàn)動(dòng)態(tài)字節(jié)碼生成的一個(gè)開源類庫(kù),極大地簡(jiǎn)化了 Java 開發(fā)者對(duì)底層字節(jié)碼操作的難度,讓開發(fā)者能夠更加輕松地在運(yùn)行時(shí)動(dòng)態(tài)生成類、修改類文件來(lái)達(dá)到輕量級(jí) AOP、ORM、基于代理的遠(yuǎn)程方法調(diào)用等功能。

(Javaassist已加入了開放源代碼JBoss 應(yīng)用服務(wù)器項(xiàng)目,通過(guò)使用Javaassist對(duì)字節(jié)碼操作為JBoss實(shí)現(xiàn)動(dòng)態(tài)AOP框架。)

2、什么是動(dòng)態(tài)編程?

動(dòng)態(tài)編程是相對(duì)于靜態(tài)編程而言的,平時(shí)我們討論比較多的就是靜態(tài)編程語(yǔ)言,例如Java,與動(dòng)態(tài)編程語(yǔ)言,例如JavaScript。那二者有什么明顯的區(qū)別呢?簡(jiǎn)單的說(shuō)就是在靜態(tài)編程中,類型檢查是在編譯時(shí)完成的,而動(dòng)態(tài)編程中類型檢查是在運(yùn)行時(shí)完成的。所謂動(dòng)態(tài)編程就是繞過(guò)編譯過(guò)程在運(yùn)行時(shí)進(jìn)行操作的技術(shù),在Java中有如下幾種方式:

?反射

這個(gè)搞Java的應(yīng)該比較熟悉,原理也就是通過(guò)在運(yùn)行時(shí)獲得類型信息然后做相應(yīng)的操作。由于Java執(zhí)行過(guò)程中是將類型載入虛擬機(jī)中的,在運(yùn)行時(shí)我們就可以動(dòng)態(tài)獲取到所有類型的信息。只能獲取卻不能修改類型信息。

?動(dòng)態(tài)編譯

動(dòng)態(tài)編譯是從Java 6開始支持的,主要是通過(guò)一個(gè)JavaCompiler接口來(lái)完成的。通過(guò)這種方式我們可以直接編譯一個(gè)已經(jīng)存在的java文件,也可以在內(nèi)存中動(dòng)態(tài)生成Java代碼,動(dòng)態(tài)編譯執(zhí)行。

?調(diào)用JavaScript引擎

早在Java 6就加入了對(duì)Script(JSR223)的支持。這是一個(gè)腳本框架,提供了讓腳本語(yǔ)言來(lái)訪問(wèn)Java內(nèi)部的方法。你可以在運(yùn)行的時(shí)候找到腳本引擎,然后調(diào)用這個(gè)引擎去執(zhí)行腳本。這個(gè)腳本API允許你為腳本語(yǔ)言提供Java支持。

?動(dòng)態(tài)生成字節(jié)碼

這種技術(shù)通過(guò)操作Java字節(jié)碼的方式在JVM中生成新類或者對(duì)已經(jīng)加載的類動(dòng)態(tài)添加元素。

3、動(dòng)態(tài)編程解決什么問(wèn)題?

在靜態(tài)語(yǔ)言中引入動(dòng)態(tài)特性,主要是為了解決一些使用場(chǎng)景的痛點(diǎn)。其實(shí)完全使用靜態(tài)編程也辦的到,只是付出的代價(jià)比較高,沒(méi)有動(dòng)態(tài)編程來(lái)的優(yōu)雅。例如依賴注入框架Spring使用了反射,而Dagger2 卻使用了代碼生成的方式(APT)。

例如:

a: 在那些依賴關(guān)系需要?jiǎng)討B(tài)確認(rèn)的場(chǎng)景: b: 需要在運(yùn)行時(shí)動(dòng)態(tài)插入代碼的場(chǎng)景,比如動(dòng)態(tài)代理的實(shí)現(xiàn)。 c: 通過(guò)配置文件來(lái)實(shí)現(xiàn)相關(guān)功能的場(chǎng)景

4、Javassit使用方法

javassistjboss的一個(gè)子項(xiàng)目,其主要的優(yōu)點(diǎn),在于簡(jiǎn)單,而且快速。直接使用java編碼的形式,而不需要了解虛擬機(jī)指令,就能動(dòng)態(tài)改變類的結(jié)構(gòu),或者動(dòng)態(tài)生成類。

操作java字節(jié)碼的工具有兩個(gè)比較流行,一個(gè)是ASM,一個(gè)是Javassit 。

?ASM直接操作字節(jié)碼指令,執(zhí)行效率高,要求使用者掌握Java類字節(jié)碼文件格式及指令,對(duì)使用者的要求比較高。

?Javassit 提供了更高級(jí)的API,執(zhí)行效率相對(duì)較,但無(wú)需掌握字節(jié)碼指令的知識(shí),對(duì)使用者要求較低。

應(yīng)用層面來(lái)講一般使用建議優(yōu)先選擇Javassit,如果后續(xù)發(fā)現(xiàn)Javassit 成為了整個(gè)應(yīng)用的效率瓶頸的話可以再考慮ASM。當(dāng)然如果開發(fā)的是一個(gè)基礎(chǔ)類庫(kù),或者基礎(chǔ)平臺(tái),還是直接使用ASM吧,相信從事這方面工作的開發(fā)者能力應(yīng)該比較高。

Javassist中最為重要的是ClassPoolCtClass ,CtMethod 以及 CtField這幾個(gè)類。

wKgaombIIl6AHddMAADIgDZAmU4088.png

?ClassPool:一個(gè)基于HashMap實(shí)現(xiàn)的CtClass對(duì)象容器,其中是類名稱,是表示該類的CtClass對(duì)象。默認(rèn)的ClassPool使用與底層JVM相同的類路徑,因此在某些情況下,可能需要向ClassPool添加類路徑或類字節(jié)。

? getDefault (): 返回默認(rèn)的ClassPool ,單例模式,一般通過(guò)該方法創(chuàng)建我們的ClassPool;

? appendClassPath(ClassPath cp), insertClassPath(ClassPath cp) : 將一個(gè)ClassPath加到類搜索路徑的末尾位置或插入到起始位置。通常通過(guò)該方法寫入額外的類搜索路徑,以解決多個(gè)類加載器環(huán)境中找不到類問(wèn)題;

? importPackage(String packageName):導(dǎo)入包;

? makeClass(String classname):創(chuàng)建一個(gè)空類,沒(méi)有變量和方法,后序通過(guò)CtClass的函數(shù)進(jìn)行添加;

? get(String classname)、getCtClass(String classname) : 根據(jù)類路徑名獲取該類的CtClass對(duì)象,用于后續(xù)的編輯。

?CtClass:表示一個(gè)類,這些CtClass對(duì)象可以從ClassPool獲得。

?debugDump; String類型,如果生成.class文件,保存在這個(gè)目錄下。

?setName(String name): 給類重命名;

?setSuperclass(CtClass clazz): 設(shè)置父類;

?addField(CtField f, Initializer init): 添加字段(屬性),初始值見(jiàn)CtField;

?addMethod(CtMethod m): 添加方法(函數(shù));

?toBytecode(): 返回修改后的字節(jié)碼。需要注意的是一旦調(diào)用該方法,則無(wú)法繼續(xù)修改CtClass;

?toClass(): 將修改后的CtClass加載至當(dāng)前線程的上下文類加載器中,CtClasstoClass方法是通過(guò)調(diào)用本方法實(shí)現(xiàn)。需要注意的是一旦調(diào)用該方法,則無(wú)法繼續(xù)修改已經(jīng)被加載的CtClass;

?writeFile(String directoryName): 根據(jù)CtClass生成 .class 文件;

?defrost(): 解凍類,用于使用了toclass()toBytecode、writeFile(),類已經(jīng)被JVM加載,Javassist凍結(jié)CtClass后;

?detach(): 避免內(nèi)存溢出,從ClassPool中移除一些不需要的CtClass。

?CtMethods:表示類中的方法。

?insertBefore(String src):在方法的起始位置插入代碼;

?insertAfter(String src):在方法的所有 return 語(yǔ)句前插入代碼以確保語(yǔ)句能夠被執(zhí)行,除非遇到exception;

?insertAt(int lineNum, String src):在指定的位置插入代碼;

?addCatch(String src, CtClass exceptionType):將方法內(nèi)語(yǔ)句作為try的代碼塊,插入catch代碼塊src;

?setBody(String src):將方法的內(nèi)容設(shè)置為要寫入的代碼,當(dāng)方法被 abstract修飾時(shí),該修飾符被移除;

?setModifiers(int mod):設(shè)置訪問(wèn)級(jí)別,一般使用Modifier調(diào)用常量;

?invoke(Object obj, Object... args):反射調(diào)用字節(jié)碼生成類的方法。

?CtFields :表示類中的字段。

?CtField(CtClass type, String name, CtClass declaring) :構(gòu)造函數(shù),添加字段類型,名稱,所屬的類;

?CtField.Initializer constant():CtClass使用addField時(shí)初始值的設(shè)置;

?setModifiers(int mod):設(shè)置訪問(wèn)級(jí)別,一般使用Modifier調(diào)用常量。

?$開頭的特殊字符

符號(hào) 具體含義
$0, $1, $2, … $0=this,$1表示方法的第一個(gè)參數(shù),依次類推,如果方法是靜態(tài)的,則 $0 不可用
$args 方法參數(shù)數(shù)組.它的類型為 Object[],$args[0]=1 , 1,1,args[1]=$2
$r 返回結(jié)果的類型,用于強(qiáng)制類型轉(zhuǎn)換
$w 包裝器類型,用于強(qiáng)制類型轉(zhuǎn)換,當(dāng)返回值是包裝類型時(shí),可以用此來(lái)強(qiáng)轉(zhuǎn)
$_ 返回值,一般在insertAfter中用到,用于得到原方法的返回值
$slg 參數(shù)類型數(shù)組,$sig[0]表示第一個(gè)參數(shù)類型
$type 返回值類型,一般在insertAfter中用到,即$_的類型
$class $0或this的類型
$e 異常類型

5、常用的Java插樁工具有哪些?

Java 插樁工具是一種能夠修改 Java 字節(jié)碼的工具,通過(guò)在應(yīng)用程序運(yùn)行時(shí)動(dòng)態(tài)修改字節(jié)碼來(lái)實(shí)現(xiàn)對(duì)程序的監(jiān)控、跟蹤、調(diào)試優(yōu)化等功能。

工具 字節(jié)碼抽象級(jí)別 具體描述
ASM、BCEL 低級(jí) 庫(kù)需要直接在字節(jié)碼級(jí)別上進(jìn)行操作。通常,它們提供大多數(shù)功能豐富的功能,但與其他字節(jié)碼操作工具相比,它們的使用也最復(fù)雜。
Javaassist 中級(jí) 庫(kù)提供了字節(jié)碼的某種抽象級(jí)別,并簡(jiǎn)化了其修改。例如,代替修改字節(jié)碼,可以使用類似于Java的語(yǔ)法進(jìn)行更改,然后將其編譯為字節(jié)碼,然后由使用的庫(kù)修改為原始字節(jié)碼。通常,它們?nèi)鄙傩薷暮蟮拇a驗(yàn)證的功能-這意味著,錯(cuò)誤可能在修改準(zhǔn)備過(guò)程中被忽略,然后在運(yùn)行時(shí)被發(fā)現(xiàn)。
AspectJ、CGLib 高級(jí) 庫(kù)使用高級(jí)指令進(jìn)行操作,并且通常配備有用于語(yǔ)法驗(yàn)證的工具集。不幸的是,從修改后的字節(jié)碼進(jìn)行的最高抽象化通常會(huì)導(dǎo)致某些功能的喪失,這些功能僅在直接修改字節(jié)碼時(shí)可用。

四、總結(jié)

本文通過(guò)對(duì)由于Javaassist包缺失導(dǎo)致項(xiàng)目啟動(dòng)過(guò)程中bean加載失敗的問(wèn)題進(jìn)行復(fù)現(xiàn),并通過(guò)demo進(jìn)行實(shí)例分析,解釋了因?yàn)槿笔?strong>Javaassist庫(kù)導(dǎo)致的應(yīng)用程序啟動(dòng)失敗問(wèn)題。并對(duì)Javaassist包相關(guān)知識(shí)進(jìn)行介紹,后續(xù)會(huì)繼續(xù)對(duì)Javaassist相關(guān)知識(shí)進(jìn)行學(xué)習(xí)補(bǔ)充。

建議大家在構(gòu)建Maven項(xiàng)目時(shí),仔細(xì)檢查POM文件中的依賴,確保沒(méi)有漏掉任何必要的庫(kù),以免因?yàn)檫z漏而引起不必要的問(wèn)題。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 測(cè)試
    +關(guān)注

    關(guān)注

    8

    文章

    5900

    瀏覽量

    130262
  • 編程
    +關(guān)注

    關(guān)注

    89

    文章

    3704

    瀏覽量

    96267
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    N9H20如何將 SPI 閃存與非作系統(tǒng) BSP 一起使用?

    N9H20如何將 SPI 閃存與非作系統(tǒng) BSP 一起使用?
    發(fā)表于 09-01 08:27

    N9H20如何將非作系統(tǒng) NVTFAT 與 SPI 閃存一起使用?

    N9H20如何將非作系統(tǒng) NVTFAT 與 SPI 閃存一起使用?
    發(fā)表于 09-01 06:38

    光纖能與電線一起走嗎

    光纖與電線在特定條件下可以一起布線,但需嚴(yán)格遵守安全規(guī)范和物理隔離要求,以下是詳細(xì)分析: 、光纖與電線的物理特性差異 光纖 傳輸介質(zhì):以光信號(hào)傳輸數(shù)據(jù),不導(dǎo)電,因此不受電磁干擾(EMI
    的頭像 發(fā)表于 07-14 10:40 ?3018次閱讀

    如何將FX3與WSL(Linux 的 Windows 子系統(tǒng))一起使用?

    如何將 FX3 與 WSL(Linux 的 Windows 子系統(tǒng))一起使用? 我在 /dev/ 中找不到任何設(shè)備 我有許多項(xiàng)目在 Windows 上使用VISUAL STUDIO項(xiàng)目進(jìn)行操作,因此請(qǐng)驗(yàn)證該設(shè)備是否在 Windo
    發(fā)表于 05-06 07:11

    芯片流片失敗都有哪些原因

    最近和某行業(yè)大佬聊天的時(shí)候聊到芯片流片失敗這件事,我覺(jué)得這是個(gè)蠻有意思的話題,遂在網(wǎng)上搜集了些芯片流片失敗的原因,放在這里和大家一起分享
    的頭像 發(fā)表于 03-28 10:03 ?1025次閱讀
    芯片流片<b class='flag-5'>失敗</b>都有哪些原因

    可以將VSCode與S32DS項(xiàng)目一起使用嗎?

    我找到了篇關(guān)于在 VS Code 環(huán)境中編譯 MCUXpresso 項(xiàng)目的文章。 我沒(méi)有在 AUTOSAR 環(huán)境中工作,所以我沒(méi)有使用 EB tresos,只使用 S32DS 3.5。 在這
    發(fā)表于 03-28 07:36

    屏蔽網(wǎng)線可以和電線一起

    屏蔽網(wǎng)線與電線不建議一起走線,原因主要有以下幾點(diǎn): 電磁干擾:電源線在傳輸電能時(shí)會(huì)產(chǎn)生電磁場(chǎng),而屏蔽網(wǎng)線中的導(dǎo)線可能會(huì)受到這個(gè)電磁場(chǎng)的干擾。這種干擾可能導(dǎo)致屏蔽網(wǎng)線的信號(hào)質(zhì)量下降、速度變慢,甚至無(wú)法
    的頭像 發(fā)表于 03-07 10:47 ?1267次閱讀

    AN-166:與Linduino一起飛行中更新

    電子發(fā)燒友網(wǎng)站提供《AN-166:與Linduino一起飛行中更新.pdf》資料免費(fèi)下載
    發(fā)表于 01-12 10:09 ?0次下載
    AN-166:與Linduino<b class='flag-5'>一起</b>飛行中更新

    ADS5404EVM 和TSW1400EVM一起使用就可以開發(fā)嗎?

    ADS5404EVM 和TSW1400EVM一起使用就可以開發(fā)嗎? 這個(gè)開發(fā)板一起使用的時(shí)候還需要購(gòu)買其他互聯(lián)電纜不? 開發(fā)套件中有沒(méi)有包含信號(hào)和時(shí)鐘的輸入同軸電纜? 三個(gè)問(wèn)題。
    發(fā)表于 12-30 08:30

    和Dr Peter一起學(xué)KiCad 4.8:設(shè)計(jì)規(guī)則檢查(DRC)

    和Dr Peter一起學(xué)KiCad 4.8:設(shè)計(jì)規(guī)則檢查(DRC)
    的頭像 發(fā)表于 12-25 14:55 ?2531次閱讀
    和Dr Peter<b class='flag-5'>一起</b>學(xué)KiCad 4.8:設(shè)計(jì)規(guī)則檢查(DRC)

    采用THS4503驅(qū)動(dòng)ADS1675,一起使用時(shí)ADC發(fā)燙的原因?

    參考設(shè)計(jì)采用THS4503驅(qū)動(dòng)ADS1675,一起使用時(shí),ADC發(fā)燙,但是能正常工作,去掉THS4503后,ADC不怎么燙,想問(wèn)下,是THS4503輸出電流過(guò)大造成的,還是什么原因?目前我前面的放大電路是端輸出, 是否可以
    發(fā)表于 12-24 07:02

    將UCC39002與3個(gè)PT4484模塊一起使用

    電子發(fā)燒友網(wǎng)站提供《將UCC39002與3個(gè)PT4484模塊一起使用.pdf》資料免費(fèi)下載
    發(fā)表于 12-21 10:23 ?0次下載
    將UCC39002與3個(gè)PT4484模塊<b class='flag-5'>一起</b>使用

    兩路I2S輸入信號(hào),四根線可以接一起輸入到TAS5766嗎?

    最近手頭有個(gè)項(xiàng)目,用的都是TI產(chǎn)品,但是關(guān)于多路I2S輸入問(wèn)題,PCM1802輸出的I2S和PCM2706輸出的IIS 能一起接入TAS5766嗎? 兩路I2S輸入信號(hào),四根線可以接一起輸入到TAS5766嗎?如果這樣接的話會(huì)
    發(fā)表于 10-30 08:18

    用TAS5630分別做兩路橋接、四路端和四路橋接,只要有兩種模式一起工作,輸出端有很尖銳的高頻噪聲,為什么?

    我用TAS5630分別做兩路橋接、四路端和四路橋接,當(dāng)每個(gè)模式單獨(dú)工作時(shí)都正常,但只要有兩種模式一起工作,輸出端有很尖銳的高頻噪聲,求高手指點(diǎn)
    發(fā)表于 10-30 07:36

    請(qǐng)問(wèn)tas5731m PBTL模式,單聲道輸出(AB連一起,CD連一起)如何實(shí)現(xiàn)左右聲道的混音輸出?

    請(qǐng)問(wèn)tas5731m PBTL模式,單聲道輸出(AB連一起,CD連一起)如何實(shí)現(xiàn)左右聲道的混音輸出 還有開發(fā)軟件里能直接拉線么
    發(fā)表于 10-17 06:23