[導(dǎo)讀]我們在對 vector 做 push 操作的時候,或者對某個指針做 new 操作的時候,如果沒有做異常處理,一旦系統(tǒng)內(nèi)存不夠用了,程序是會被 terminate 掉的。這就要求我們熟悉 C++ 異常,保證日常開發(fā)中能正確處理它。本文主要介紹C++ 異常機(jī)制的底層原理與實(shí)際應(yīng)用,通俗易懂,快來讀一讀吧。
(給C語言與CPP編程加星標(biāo),提升C/C++技能)
作者:melonstreet ?整理:cpp開發(fā)者
出處:https://www.cnblogs.com/QG-whz/
【導(dǎo)讀】:
我們在對 vector 做 push 操作的時候,或者對某個指針做 new 操作的時候,如果沒有做異常處理,一旦系統(tǒng)內(nèi)存不夠用了,程序是會被 terminate 掉的。這就要求我們熟悉 C++ 異常,保證日常開發(fā)中能正確處理它。本文主要介紹C++ 異常機(jī)制的底層原理與實(shí)際應(yīng)用,通俗易懂,快來讀一讀吧。
以下是正文
C++異常機(jī)制概述
異常處理是C++的一項(xiàng)語言機(jī)制,用于在程序中處理異常事件。異常事件在 C++ 中表示為
異常對象
。
異常事件發(fā)生時,程序使用throw關(guān)鍵字拋出異常表達(dá)式,拋出點(diǎn)稱為異常出現(xiàn)點(diǎn),由操作系統(tǒng)為程序設(shè)置當(dāng)前異常對象,然后執(zhí)行程序的當(dāng)前異常處理代碼塊,在包含了異常出現(xiàn)點(diǎn)的最內(nèi)層的?
try?
塊,依次匹配catch語句中的異常對象(只進(jìn)行類型匹配,catch參數(shù)有時在 catch 語句中并不會使用到)。若匹配成功,則執(zhí)行 catch 塊內(nèi)的異常處理語句,然后接著執(zhí)行?
try...catch...?
塊之后的代碼。如果在當(dāng)前的 try...catch... 塊內(nèi)找不到
匹配
該異常對象的catch語句,則由更外層的 try...catch... 塊來處理該異常;如果當(dāng)前函數(shù)內(nèi)所有的 try...catch... 塊都不能匹配該異常,則遞歸回退到調(diào)用棧的上一層去處理該異常。如果一直退到主函數(shù) main() 都不能處理該異常,則調(diào)用系統(tǒng)函數(shù) terminate() 終止程序。
一個最簡單的 try...catch... 的例子如下所示。我們有個程序用來記班級學(xué)生考試成績,考試成績分?jǐn)?shù)的范圍在 0-100 之間,不在此范圍內(nèi)視為數(shù)據(jù)異常:
int main(){ int score=0; while (cin >> score) { try { if (score > 100 || score < 0) { throw score; } } catch (int score) { cerr << "你輸入的分?jǐn)?shù)數(shù)值有問題,請重新輸入!"; continue; } }}
在上面這個示例中,
throw?
是個關(guān)鍵字,與拋出表達(dá)式構(gòu)成了 throw 語句。
其語法為:
throw 語句必須包含在 try 塊中,也可以是被包含在調(diào)用棧的外層函數(shù)的 try 塊中,如:
void registerScore(int score){ if (score > 100 || score < 0) throw score; }int main(){ int score=0; while (cin >> score) { try { registerScore(score); } catch (int score) { cerr << "你輸入的分?jǐn)?shù)數(shù)值有問題,請重新輸入!"; continue; } }}
執(zhí)行 throw 語句時,throw 表達(dá)式將作為對象被復(fù)制構(gòu)造為一個新的對象,稱為異常對象。
異常對象放在內(nèi)存的特殊位置,該位置既不是棧也不是堆,在 window 上是放在線程信息塊 TIB 中。
這個構(gòu)造出來的新對象與本級的 try 所對應(yīng)的 catch 語句進(jìn)行
類型匹配
,類型匹配的原則在下面介紹。
在本例中,依據(jù) score 構(gòu)造出來的對象類型為 int,與 catch(int score) 匹配上,程序控制權(quán)轉(zhuǎn)交到 catch 的語句塊,進(jìn)行異常處理代碼的執(zhí)行。如果在本函數(shù)內(nèi)與 catch 語句的類型匹配不成功,則在調(diào)用棧的外層函數(shù)繼續(xù)匹配,如此遞歸執(zhí)行直到匹配上 catch 語句,或者直到 main 函數(shù)都沒匹配上而調(diào)用系統(tǒng)函數(shù) terminate() 終止程序。
當(dāng)執(zhí)行一個 throw 語句時,跟在 throw 語句之后的語句將不再被執(zhí)行,throw 語句的語法有點(diǎn)類似于 return,因此導(dǎo)致在調(diào)用棧上的函數(shù)可能提早退出。
異常對象
異常對象是一種特殊的對象,編譯器依據(jù)異常拋出表達(dá)式復(fù)制構(gòu)造異常對象,這要求拋出異常表達(dá)式不能是一個不完全類型(一個類型在聲明之后定義之前為一個不完全類型。不完全類型意味著該類型沒有完整的數(shù)據(jù)與操作描述),而且可以進(jìn)行復(fù)制構(gòu)造,這就要求異常拋出表達(dá)式的復(fù)制構(gòu)造函數(shù)(或移動構(gòu)造函數(shù))、析構(gòu)函數(shù)不能是私有的。
異常對象不同于函數(shù)的局部對象,局部對象在函數(shù)調(diào)用結(jié)束后就被自動銷毀,而異常對象將駐留在所有可能被激活的 catch 語句都能訪問到的內(nèi)存空間中,也即上文所說的 TIB。當(dāng)異常對象與 catch 語句成功匹配上后,在該 catch 語句的結(jié)束處被自動析構(gòu)。
在函數(shù)中返回局部變量的引用或指針幾乎肯定會造成錯誤,同樣的道理,在 throw 語句中拋出局部變量的指針或引用也幾乎是錯誤的行為。如果指針?biāo)赶虻淖兞吭趫?zhí)行 catch 語句時已經(jīng)被銷毀,對指針進(jìn)行解引用將發(fā)生意想不到的后果。
throw 出一個表達(dá)式時,該表達(dá)式的靜態(tài)編譯類型將決定異常對象的類型。所以當(dāng) throw 出的是基類指針的解引用,而該指針?biāo)赶虻膶?shí)際對象是派生類對象,此時將發(fā)生派生類對象切割。
除了拋出用戶自定義的類型外,C++ 標(biāo)準(zhǔn)庫定義了一組類,用戶報告標(biāo)準(zhǔn)庫函數(shù)遇到的問題。這些標(biāo)準(zhǔn)庫異常類只定義了幾種運(yùn)算,包括創(chuàng)建或拷貝異常類型對象,以及為異常類型的對象賦值。
| 標(biāo)準(zhǔn)異常類 |
描述 |
頭文件 |
| exception |
最通用的異常類,只報告異常的發(fā)生而不提供任何額外的信息 |
exception |
| runtime_error |
只有在運(yùn)行時才能檢測出的錯誤 |
stdexcept |
| rang_error |
運(yùn)行時錯誤:產(chǎn)生了超出有意義值域范圍的結(jié)果 |
stdexcept |
| overflow_error |
運(yùn)行時錯誤:計(jì)算上溢 |
stdexcept |
| underflow_error |
運(yùn)行時錯誤:計(jì)算下溢 |
stdexcept |
| logic_error |
程序邏輯錯誤 |
stdexcept |
| domain_error |
邏輯錯誤:參數(shù)對應(yīng)的結(jié)果值不存在 |
stdexcept |
| invalid_argument |
邏輯錯誤:無效參數(shù) |
stdexcept |
| length_error |
邏輯錯誤:試圖創(chuàng)建一個超出該類型最大長度的對象 |
stdexcept |
| out_of_range |
邏輯錯誤:使用一個超出有效范圍的值 |
stdexcept |
| bad_alloc |
內(nèi)存動態(tài)分配錯誤 |
new |
| bad_cast |
dynamic_cast類型轉(zhuǎn)換出錯 |
type_info |
catch 關(guān)鍵字
catch語句匹配被拋出的異常對象。如果 catch 語句的參數(shù)是引用類型,則該參數(shù)可直接作用于異常對象,即參數(shù)的改變也會改變異常對象,而且在 catch 中重新拋出異常時會繼續(xù)傳遞這種改變。如果 catch 參數(shù)是傳值的,則復(fù)制構(gòu)函數(shù)將依據(jù)異常對象來構(gòu)造catch 參數(shù)對象。在該 catch 語句結(jié)束的時候,先析構(gòu) catch 參數(shù)對象,然后再析構(gòu)異常對象。
在進(jìn)行異常對象的匹配時,編譯器不會做任何的隱式類型轉(zhuǎn)換或類型提升。除了以下幾種情況外,異常對象的類型必須與 catch 語句的聲明類型完全匹配:
允許從非常量到常量的類型轉(zhuǎn)換。
允許派生類到基類的類型轉(zhuǎn)換。
數(shù)組被轉(zhuǎn)換成指向數(shù)組(元素)類型的指針。
函數(shù)被轉(zhuǎn)換成指向函數(shù)類型的指針。
尋找 catch 語句的過程中,匹配上的未必是類型完全匹配那項(xiàng),而在是最靠前的第一個匹配上的 catch 語句(我稱它為最先匹配原則)。所以,派生類的處理代碼 catch 語句應(yīng)該放在基類的處理 catch 語句之前,否則先匹配上的總是參數(shù)類型為基類的 catch 語句,而能夠精確匹配的 catch 語句卻不能夠被匹配上。
在 catch 塊中,如果在當(dāng)前函數(shù)內(nèi)無法解決異常,可以繼續(xù)向外層拋出異常,讓外層catch 異常處理塊接著處理。此時可以使用不帶表達(dá)式的 throw 語句將捕獲的異常重新拋出:
被重新拋出的異常對象為保存在 TIB 中的那個異常對象,與 catch 的參數(shù)對象沒有關(guān)系,若 catch 參數(shù)對象是引用類型,可能在 catch 語句內(nèi)已經(jīng)對異常對象進(jìn)行了修改,那么重新拋出的是修改后的異常對象;
若catch參數(shù)對象是非引用類型,則重新拋出的異常對象并沒有受到修改。
使用 catch(...){} 可以捕獲所有類型的異常,根據(jù)最先匹配原則,catch(...){} 應(yīng)該放在所有 catch 語句的最后面,否則無法讓其他可以精確匹配的 catch 語句得到匹配。通常在catch(...){} 語句中執(zhí)行當(dāng)前可以做的處理,然后再重新拋出異常。注意,catch 中重新拋出的異常只能被外層的 catch 語句捕獲。
棧展開、RAII
其實(shí)棧展開已經(jīng)在前面說過,就是從異常拋出點(diǎn)一路向外層函數(shù)尋找匹配的 catch 語句的過程,尋找結(jié)束于某個匹配的 catch 語句或標(biāo)準(zhǔn)庫函數(shù) terminate。這里重點(diǎn)要說的是棧展開過程中對局部變量的銷毀問題。我們知道,在函數(shù)調(diào)用結(jié)束時,函數(shù)的局部變量會被系統(tǒng)自動銷毀,類似的,throw 可能會導(dǎo)致調(diào)用鏈上的語句塊提前退出,此時,語句塊中的局部變量將按照構(gòu)成生成順序的逆序,依次調(diào)用析構(gòu)函數(shù)進(jìn)行對象的銷毀。例如下面這個例子:
class A{public: A() :a(0){ cout << "A默認(rèn)構(gòu)造函數(shù)" << endl; } A(const A& rsh){ cout << "A復(fù)制構(gòu)造函數(shù)" << endl; } ~A(){ cout << "A析構(gòu)函數(shù)" << endl; }private: int a;};int main(){ try { A a ; throw a; } catch (A a) { ; } return 0;}
程序?qū)⑤敵觯?/p>
定義變量 a 時調(diào)用了默認(rèn)構(gòu)造函數(shù),使用 a 初始化異常變量時調(diào)用了復(fù)制構(gòu)造函數(shù),使用異常變量復(fù)制構(gòu)造 catch 參數(shù)對象時同樣調(diào)用了復(fù)制構(gòu)造函數(shù)。三個構(gòu)造對應(yīng)三個析構(gòu),也即 try 語句塊中局部變量 a 自動被析構(gòu)了。然而,如果 a 是在自由存儲區(qū)上分配的內(nèi)存時:
int main(){ try { A * a= new A; throw *a; } catch (A a) { ; } getchar(); return 0;}
程序運(yùn)行結(jié)果:
同樣的三次構(gòu)造,卻只調(diào)用了兩次的析構(gòu)函數(shù)!說明 a 的內(nèi)存在發(fā)生異常時并沒有被釋放掉,發(fā)生了內(nèi)存泄漏。
RAII機(jī)制有助于解決這個問題,RAII(Resource acquisition is initialization,資源獲取即初始化)。它的思想是以對象管理資源。為了更為方便、魯棒地釋放已獲取的資源,避免資源死鎖,一個辦法是把資源數(shù)據(jù)用對象封裝起來。程序發(fā)生異常,執(zhí)行棧展開時,封裝了資源的對象會被自動調(diào)用其析構(gòu)函數(shù)以釋放資源。C++ 中的智能指針便符合RAII。關(guān)于這個問題詳細(xì)可以看《Effective C++》條款13.
異常機(jī)制的一個合理的使用是在構(gòu)造函數(shù)中。構(gòu)造函數(shù)沒有返回值,所以應(yīng)該使用異常機(jī)制來報告發(fā)生的問題。更重要的是,構(gòu)造函數(shù)拋出異常表明構(gòu)造函數(shù)還沒有執(zhí)行完,其對應(yīng)的析構(gòu)函數(shù)不會自動被調(diào)用,因此析構(gòu)函數(shù)應(yīng)該先析構(gòu)所有所有已初始化的基對象,成員對象,再拋出異常。
C++ 類構(gòu)造函數(shù)初始化列表的異常機(jī)制,稱為 function-try block。一般形式為:
myClass::myClass(type1 pa1) try: _myClass_val (初始化值){ } catch ( exception& err ){ };
C++ 不禁止析構(gòu)函數(shù)向外界拋出異常,但析構(gòu)函數(shù)被期望不向外界函數(shù)拋出異常。析構(gòu)函數(shù)中向函數(shù)外拋出異常,將直接調(diào)用 terminator() 系統(tǒng)函數(shù)終止程序。如果一個析構(gòu)函數(shù)內(nèi)部拋出了異常,就應(yīng)該在析構(gòu)函數(shù)的內(nèi)部捕獲并處理該異常,不能讓異常被拋出析構(gòu)函數(shù)之外??梢匀绱颂幚恚?/span>
若析構(gòu)函數(shù)拋出異常,調(diào)用 std::abort() 來終止程序。
在析構(gòu)函數(shù)中 catch 捕獲異常并作處理。
關(guān)于具體細(xì)節(jié),有興趣可以看《Effective C++》條款08:別讓異常逃離析構(gòu)函數(shù)。
noexcept修飾符與noexcept操作符
noexcept 修飾符是 C++11 新提供的異常說明符,用于聲明一個函數(shù)不會拋出異常。編譯器能夠針對不拋出異常的函數(shù)進(jìn)行優(yōu)化,另一個顯而易見的好處是你明確了某個函數(shù)不會拋出異常,別人調(diào)用你的函數(shù)時就知道不用針對這個函數(shù)進(jìn)行異常捕獲。在 C++98中關(guān)于異常處理的程序中你可能會看到這樣的代碼:
void func() throw(int ,double ) {...}void func() throw(){...}
這是 throw 作為函數(shù)異常說明,前者表示 func()這個函數(shù)可能會拋出 int 或 double 類型的異常,后者表示 func() 函數(shù)不會拋出異常。事實(shí)上前者很少被使用,在 C++11 這種做法已經(jīng)被摒棄,而后者則被 C++11 的 noexcept 異常聲明所代替:
void func() noexcept {...}
在 C++11 中,編譯器并不會在編譯期檢查函數(shù)的 noexcept 聲明,因此,被聲明為noexcept 的函數(shù)若攜帶異常拋出語句還是可以通過編譯的。
在函數(shù)運(yùn)行時若拋出了異常,編譯器可以選擇直接調(diào)用 terminate() 函數(shù)來終結(jié)程序的運(yùn)行,因此,noexcept 的一個作用是
阻止異常的傳播,提高安全性
.
上面一點(diǎn)提到了,我們不能讓異常逃出析構(gòu)函數(shù),因?yàn)槟菍?dǎo)致程序的不明確行為或直接終止程序。實(shí)際上出于安全的考慮,C++11 標(biāo)準(zhǔn)中讓類的析構(gòu)函數(shù)默認(rèn)也是 noexcept 的。同樣是為了安全性的考慮,經(jīng)常被析構(gòu)函數(shù)用于釋放資源的 delete 函數(shù),C++11 也默認(rèn)將其設(shè)置為 noexcept。
noexcept也可以接受一個常量表達(dá)式作為參數(shù),例如:
void func() noexcept(常量表達(dá)式);
常量表達(dá)式的結(jié)果會被轉(zhuǎn)換成 bool 類型,noexcept(bool) 表示函數(shù)不會拋出異常,noexcept(false) 則表示函數(shù)有可能會拋出異常。
故若你想更改析構(gòu)函數(shù)默認(rèn)的 noexcept聲明,可以顯式地加上 noexcept(false) 聲明,但這并不會帶給你什么好處。
異常處理機(jī)制的主要環(huán)節(jié)是運(yùn)行期類型檢查。當(dāng)拋出一個異常時,必須確定異常是不是從 try 塊中拋出。異常處理機(jī)制為了完善異常和它的處理器之間的匹配,需要存儲每個異常對象的類型信息以及 catch 語句的額外信息。由于異常對象可以是任何類型(如用戶自定義類型),并且也可以是多態(tài)的,獲取其動態(tài)類型必須要使用運(yùn)行時類型檢查(RTTI),此外還需要運(yùn)行期代碼信息和關(guān)于每個函數(shù)的結(jié)構(gòu)。
當(dāng)異常拋出點(diǎn)所在函數(shù)無法解決異常時,異常對象沿著調(diào)用鏈被傳遞出去,程序的控制權(quán)也發(fā)生了轉(zhuǎn)移。轉(zhuǎn)移的過程中為了將異常對象的信息攜帶到程序執(zhí)行處(如對異常對象的復(fù)制構(gòu)造或者 catch 參數(shù)的析構(gòu)),在時間和空間上都要付出一定的代價,本身也有不安全性,特別是異常對象是個復(fù)雜的類的時候。
異常處理技術(shù)在不同平臺以及編譯器下的實(shí)現(xiàn)方式都不同,但都會給程序增加額外的負(fù)擔(dān),當(dāng)異常處理被關(guān)閉時,額外的數(shù)據(jù)結(jié)構(gòu)、查找表、一些附加的代碼都不會被生成,正是因?yàn)槿绱?,對于明確不拋出異常的函數(shù),我們需要使用 noexcept 進(jìn)行聲明。
關(guān)于C++異常機(jī)制,歡迎在評論中和我探討。覺得文章不錯,請點(diǎn)贊和在看支持我繼續(xù)分享好文。謝謝!
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
全球嵌入式技術(shù)領(lǐng)域的年度盛會2026嵌入式世界展(Embedded World 2026,簡稱EW26)于3月10日至12日在德國紐倫堡成功舉辦。作為物聯(lián)網(wǎng)和邊緣AI領(lǐng)域的領(lǐng)先企業(yè),Silicon Labs(亦稱“芯科科...
關(guān)鍵字:
物聯(lián)網(wǎng)
邊緣AI
嵌入式
3月10日至12日,2026年嵌入式世界展(Embedded World 2026,簡稱EW26)在德國紐倫堡展覽中心成功舉辦。作為領(lǐng)先的邊緣AI與智能音頻等媒體處理技術(shù)和芯片解決方案提供商,XMOS以沉浸式演示與技術(shù)交...
關(guān)鍵字:
邊緣AI
智能音頻
嵌入式
在嵌入式系統(tǒng)開發(fā)中,SoC(System on Chip)的多樣性始終是橫亙在開發(fā)者面前的難題。以某工業(yè)物聯(lián)網(wǎng)網(wǎng)關(guān)項(xiàng)目為例,其需同時支持NXP i.MX8M、Rockchip RK3566和Allwinner H616三...
關(guān)鍵字:
Platform Driver模型
嵌入式
在高性能網(wǎng)絡(luò)編程領(lǐng)域,事件驅(qū)動模型以其高效的I/O多路復(fù)用能力成為主流范式。不同于傳統(tǒng)的多線程/多進(jìn)程阻塞模型,事件驅(qū)動通過單一線程監(jiān)聽多個文件描述符的狀態(tài)變化,以非阻塞方式處理I/O事件,顯著減少了上下文切換開銷和資源...
關(guān)鍵字:
事件驅(qū)動
C語言
在非易失性存儲器領(lǐng)域,EEPROM(電可擦除可編程只讀存儲器)曾長期占據(jù)主流地位,廣泛應(yīng)用于各類電子設(shè)備的參數(shù)存儲、日志記錄等場景。但隨著工業(yè)控制、汽車電子、醫(yī)療設(shè)備等領(lǐng)域?qū)Υ鎯π阅芴岢龈咭螅現(xiàn)RAM(鐵電隨機(jī)存取存...
關(guān)鍵字:
存儲器
可編程
嵌入式
康佳特將aReady.COM擴(kuò)展至Arm架構(gòu)模塊,基于恩智浦i.MX 95處理器打造應(yīng)用就緒的軟硬件構(gòu)建模塊,集成操作系統(tǒng)、系統(tǒng)整合與IoT連接能力,賦能高價值應(yīng)用快速落地
關(guān)鍵字:
處理器
IoT
嵌入式
3月12日,2026年中國家電及消費(fèi)電子博覽會(以下簡稱:AWE 2026)在上海盛大開幕。展會現(xiàn)場,場景化、系統(tǒng)化、一體化的家電解決方案成為行業(yè)焦點(diǎn),消費(fèi)者對家電的關(guān)注也已從基礎(chǔ)的尺寸匹配,延伸至對“空間秩序感”和“視...
關(guān)鍵字:
消費(fèi)電子
蒸烤箱
嵌入式
超高效NPU IP在資源受限設(shè)備中推進(jìn)邊緣AI,因而獲得認(rèn)可
關(guān)鍵字:
人工智能
嵌入式
NPU
上海2026年3月12日 /美通社/ -- 3月12日,2026中國家電及消費(fèi)電子博覽會(AWE 2026)在上海新國際博覽中心和東方樞紐國際商務(wù)合作區(qū)展區(qū)正式啟幕。本屆展會以"AI科技?慧享未來"為...
關(guān)鍵字:
西門子
博世
嵌入式
洗碗機(jī)
在“AI科技,慧享未來”的時代命題下,人工智能正加速滲透至家庭生活的每一個細(xì)節(jié)。2026年中國家電及消費(fèi)電子博覽會(AWE2026)在上海啟幕,聚焦AI技術(shù)如何重塑家電形態(tài)與人居體驗(yàn)。圍繞“智造不凡 悅享非凡”主題,西門...
關(guān)鍵字:
嵌入式
冰箱
AI
在嵌入式系統(tǒng)開發(fā)領(lǐng)域,Qt憑借其跨平臺特性、豐富的GUI組件和高效的開發(fā)框架,成為構(gòu)建交互式界面的首選工具之一。對于嵌入式工程師而言,掌握Qt不僅能提升開發(fā)效率,更能為智能設(shè)備、工業(yè)控制、汽車電子等領(lǐng)域的產(chǎn)品帶來更優(yōu)質(zhì)的...
關(guān)鍵字:
嵌入式
QT
在人工智能加速滲透家庭生活的背景下,2026年中國家電及消費(fèi)電子博覽會(AWE2026)于上海新國際博覽中心盛大開幕。本屆AWE以“AI科技,慧享未來”為主題,集中呈現(xiàn)了前沿科技如何重新定義家電形態(tài)與人居空間。作為全球高...
關(guān)鍵字:
全屋智能
人工智能
嵌入式
2026 年 3 月 11 日,中國北京訊 - 全球先進(jìn)半導(dǎo)體解決方案供應(yīng)商瑞薩電子(TSE:6723)今日宣布,由Altium提供技術(shù)支持的智能模型化平臺“Renesas 365”正式全面上市:該平臺可將元器件與解決方...
關(guān)鍵字:
嵌入式
微控制器
元器件
近日,2026年中國家電及消費(fèi)電子博覽會(AWE2026)在上海盛大舉行,本屆AWE以“AI科技,慧享未來”為主題,全面展示人工智能與家電深度融合所帶來的創(chuàng)新成果。西門子家電以“智造不凡 悅享非凡”為主題亮相展會AWE展...
關(guān)鍵字:
人工智能
抽屜蒸箱
嵌入式
瑞典烏普薩拉,2026年3月9日 — IAR今日宣布,對其嵌入式開發(fā)平臺進(jìn)行擴(kuò)展,推出全新長期支持(Long-Term Support,LTS)服務(wù),旨在幫助客戶在漫長的產(chǎn)品生命周期中,維持穩(wěn)定、可復(fù)現(xiàn)的工具鏈。
關(guān)鍵字:
嵌入式
工具鏈
工業(yè)自動化
中國上海 – 2026年3月9日 – 全球知名的電子元器件授權(quán)代理商富昌電子(Future Electronics)近日憑借在嵌入式領(lǐng)域的持續(xù)深耕與快速成長,榮膺瑞薩電子嵌入式處理產(chǎn)品事業(yè)部頒發(fā)的“2025最佳潛力獎”。...
關(guān)鍵字:
嵌入式
元器件
2026年3月9日 – 提供超豐富半導(dǎo)體和電子元器件?的業(yè)界知名新品引入 (NPI) 代理商貿(mào)澤電子 (Mouser Electronics) 推出內(nèi)容豐富的邊緣計(jì)算資源中心,為工程師提供業(yè)界新動態(tài)。邊緣計(jì)算正在重塑數(shù)字...
關(guān)鍵字:
邊緣計(jì)算
AI
嵌入式
計(jì)劃將加速Wi-Fi HaLow技術(shù)的普及與產(chǎn)品上市進(jìn)程,推動Wi-Fi HaLow生態(tài)系統(tǒng)規(guī)模化發(fā)展
關(guān)鍵字:
Wi-Fi
物聯(lián)網(wǎng)
嵌入式