因應疫情 日本富士山四條登山步道將全封

2{icon} {views}

摘錄自2020年5月18日新頭殼報導

富士山有四條攻頂登山步道,受到武漢肺炎(COVID-19)影響,管理步道的山梨縣及靜岡縣政府已決定或大致決定封閉步道,也讓今年夏季開山的富士山形同「封山」。

日本讀賣新聞報導,靜岡縣政府已大致決定從7月10日到9月10日止,封閉縣內三條攻頂富士山的登山步道,主要是受到疫情擴大,無法確保登山者安全才會決定封閉步道。山梨縣政府15日也決定封閉縣內登山步道,因此,今年攻頂富士山的四條登山步道將全數封閉。

今年不光是登山步道上的登山小屋無法使用,連登山步道上的醫療設施也無法使用,讓山友登頂變得非常危險。靜岡縣政府將在登山口採取設置路障等措施,縣府負責人員說,希望山友本季先別入山。

生活環境
生態旅遊
國際新聞
日本
封山
武漢肺炎
疫情下的食衣住行
公共衛生

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※別再煩惱如何寫文案,掌握八大原則!

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※回頭車貨運收費標準

台中搬家公司費用怎麼算?

要便宜還要檔次?8萬元白菜價的合資三廂車隨便挑

5{icon} {views}

38-12。08萬元曾經的“老三樣”,是一代人的汽車情結。但如今,“老三樣”的輝煌成就已是茶餘飯後的談資。“老三樣”除了捷達和桑塔納繼續保持強大的產品號召力,接替富康的全新愛麗舍就顯得有點舉步維艱,銷量和影響力遠遠不及前面兩位老朋友的一半。

8萬元的預算買輛合資轎車,看似是一件非常不可思議的事情。但實際上,8-10萬這一細分市場早已不是合資車的天下,而是被日益強大的自主品牌所瓜分,競爭的壓力導致了入門級合資車售價區間不斷下探。8萬元,不僅能買到更有面子的合資品牌,關鍵它們還是一些實力不錯的三廂轎車。

新捷達

指導價:7.99-13.49萬元

不管大家信不信,反正的第一台車就是捷達,嗯!沒錯,就是隨處可見的捷達教練車,幾乎每一位有駕照的朋友都是被捷達車一路虐過來的。從最開始上市至今,捷達的累計銷量已經突破360萬台車。足以可見,捷達的實力派口碑可真不是蓋得的。即然如此,那就來推薦這款近期上新市的新捷達。作為中期改款后的新捷達,形象氣質完全煥然一新,相比以往刻板沉穩的印象更加年輕且運動化,但造型還是離不開你最熟悉的大眾風格。

隨之改變的還有新捷達的內飾,無論做工質感,還是時尚感均讓你懷疑這還是捷達嗎?與此同時,新捷達總算是良心發現了,配置水準大大高於現款捷達,中控台也不再是簡陋的不成樣,而是換裝了更有逼格的大尺寸显示屏,部分車型還增加了胎壓監測,ESp,倒車雷達等實用配置,空間還一如既往的出色。總體來說,新款捷達的性價比表現進步神速。真是厲害了,我的捷達哥!

科沃茲

指導價:7.99-10.99萬元

科沃茲和科魯茲,傻傻分不清。不僅取名方式非常雷同,設計方面也找到一些共同點。雖然科沃茲長得沒有科魯茲那麼有個性,但至少在很多年輕人看來,科沃茲的外觀設計還是比較成功的,以致於甚至你可能猜不到它的起步價只要7.99萬,頂配也不超過11萬,試問這樣有吸引力的價格,又能照顧你面子的合資轎車,國產轎車還怎麼活?

值得一提的是,儘管科沃茲是台中國特供車,但你別否認,其實打着特供車的名義殺入家用車市場,銷量真的差不到哪去,10月份科沃茲的銷量已經反超大哥科魯茲了,也說明科沃茲這款新車方方面面都有不俗的實力。其中,檔次感和配置是它最大的產品亮點,時尚有質感內飾可以輕易俘虜年輕人的心。配置方面,除了最低配感覺讓人稍微不值之外,其它款車型給出的配置已經非常厚道了,好嗎?綜合對比同級競品來說,科沃茲是少有的全能选手,不失為年輕人的入門家用車的首選。

愛麗舍

指導價:8.38-12.08萬元

曾經的“老三樣”,是一代人的汽車情結。但如今,“老三樣”的輝煌成就已是茶餘飯後的談資。“老三樣”除了捷達和桑塔納繼續保持強大的產品號召力,接替富康的全新愛麗舍就顯得有點舉步維艱,銷量和影響力遠遠不及前面兩位老朋友的一半。而從今天的審美觀來看,愛麗舍雖然不是走那種很驚艷的設計路線,在同級別中屬於很夠看的,辨識度也不錯。不過,讓人不爽的是,與時尚外觀形成巨大落差的內飾感實在太low了。

但總的來說,憑藉日積月累的口碑效應,過硬的可靠性,以及同級中一流的動力性和底盤調校,尤其是遭人詬病的4AT變速箱換成6AT變速箱之後,全新愛麗舍產品力得到進一步提升。同時,再結合一個不高不低的售價區間,愛麗舍還是一款非常靠譜的合資轎車。但也有一些不得不提的槽點,比如令人抓狂的風噪胎噪,以及不夠人性化的設計。當然,相比同級的德系車型,愛麗舍的性價比優勢更突出。

鋒范

指導價:7.98-11.98萬元

在8萬元的價位上,可能更多的人會考慮飛度。但如果介意飛度是台兩廂車的話,那麼退而求其次,購買三廂車鋒范無疑是最折中的選擇。當然,鋒范的銷量也並不差,精緻動感的車身造型,迎合了年輕人的審美觀念。但真正讓人佩服的是本田的地球夢發動機技術!無論是動力性還是燃油性,“黑科技”傍手的鋒范都有可圈可點的表現,其可靠性和經濟性足夠省心省力。

此外,要論空間的話,鋒范同樣不甘落後。繼承了本田MM理念的鋒范,軸距2600mm的車內空間,卻有十足的越級表現,即使滿載5位成年人,鋒范也是應付得游刃有餘。最後,再說說人家的性價比,一般是不建議入手本田車型的最低配版,怎麼說?簡直寒酸到不忍直視,鋒范也毫不例外,不僅外觀內飾有區別對待,居然連一些很基礎的配置如收音機、遙控鑰匙都沒有。拋開鋒范在最低配車的不厚道,其次低配、中配版都能讓人心滿意足。所以,鋒范作為不追求配置年輕人的代步車,也是完全稱職的。

手裡有8萬元的購車預算,還是會陷入比較尷尬的兩難,往往是高不成低不就。心裏想着買好點的合資車,但錢包不給力。退一步買性價比更高的國產車,又有些心不甘情不願。如果有類似這樣疑慮的朋友,不妨考慮推薦的這四款入門合資轎車。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

※回頭車貨運收費標準

長灘島上幾乎沒有蝙蝠了 菲律賓度假勝地的生態危機:狐蝠族群消逝中

5{icon} {views}

環境資訊中心綜合外電;黃鈺婷 翻譯;林大利 審校;稿源:Mongabay

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

※回頭車貨運收費標準

同叫X7的自主SUV,誰才是更強的後起之秀

7{icon} {views}

動力總成兩者都是1。5L自吸發動機+5擋手動的動力組合。漢騰X7最大可輸出149匹馬力和215牛米,在2000轉才爆發最大扭矩到4000轉就開始衰減。而斯威X7最大可輸出156馬力和230牛米,在1750轉便爆發最大扭矩,可持續到4500轉。從賬面來看,斯威X7的動力要優於漢騰X7,出力也更早,同時還是直噴發動機,能更好地減少燃油損失。

前言

自主品牌有不少車型都喜歡用X7來命名,所以一說起X7總能提起一堆車型。最近上市了兩款X7,分別屬於漢騰和斯威的,這兩個牌子也是新近建立的汽車廠商,兩款車型的對碰到底會擦出什麼火花,讓我們拭目以待。

為了公平起見,我會拿漢騰X7的手動豪華型與斯威X7的手動舒適型來對比,兩者價差為1100元。

漢騰汽車-漢騰X7

2016款 1.5T 手動豪華型

指導價:8.98萬

華晨鑫源-斯威X7

2016款 1.5T 手動舒適型

指導價:9.09萬

外觀設計

漢騰X7的前臉看起來比較扁平,整個設計拉得比較寬,給人一種大車感。尾部則更為簡約,雙邊兩出的排氣口顯得較為大體。

斯威X7從前面看,會覺得有一點點像寶馬X3,特別是那兩組圓形大燈,看起來與寶馬的天使之瞳更為相像。大面積的鍍鉻格柵也很符合國人的口味。側面看,斯威X7像一台升高版的MpV。尾部設計則比較緊湊,最具亮點是那個M標識,像極了寶馬M系的標識,只是那幾條斜線的顏色有所不同。

內飾設計

漢騰X7的中控會稍向駕駛員一側傾斜,木紋裝飾板也顯得很高級,用料方面對得起這個價格。只是那塊中控屏幕有點汽配城的feel,拖累整個內飾觀感。

斯威X7的中控設計則看起來先進許多,與榮威RX5的類似,也是一整塊觸控屏,乾淨整潔,會比較耐看。

動力總成

兩者都是1.5L自吸發動機+5擋手動的動力組合。漢騰X7最大可輸出149匹馬力和215牛米,在2000轉才爆發最大扭矩到4000轉就開始衰減。而斯威X7最大可輸出156馬力和230牛米,在1750轉便爆發最大扭矩,可持續到4500轉。從賬面來看,斯威X7的動力要優於漢騰X7,出力也更早,同時還是直噴發動機,能更好地減少燃油損失。

底盤表現

漢騰X7的后懸架用的是多連桿獨立懸架,濾震動作會比較富有韌性,迎接衝擊時,有點點硬。不過整體還是偏軟,過彎時的側傾較大。

斯威X7的后懸架用的是扭力梁,不過調校得還是很不錯。在過一些減速帶時,對車子的小彈跳抑製得很到位。

空間表現

↑漢騰X7的後座↑

↑漢騰X7的後排中央↑

↑斯威X7的後排↑

兩者的空間都屬於中規中矩那種,但是漢騰X7的後排中央會有一點凸起,而斯威X7則幾乎全平。關鍵是,斯威X7是一款7座車型,第三排短途坐一下乘客是完全沒有問題的。不過斯威X7的第二排座椅不可前後調節,即便如此空間也很可觀。

配置對比

從配置的對比上來看,兩者各有千秋,不過漢騰X7上到豪華型也沒有車身穩定系統,這點很說不過去。具體的對比,可以看下圖。

編者總結

兩輛X7的對比上,斯威X7會更為佔優,具體表現在動力、空間表現與配置都要優於漢騰X7。作為兩個後起之秀,這樣的定價確實也是足夠親民。雖然許多方面都不佔優勢,但是漢騰X7較為傳統的內飾設計,也許可以俘獲不少大叔的芳心。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

※回頭車貨運收費標準

1.5T+CVT還是DCT?這款自主高品質轎車將配新的動力系統

1{icon} {views}

但是就是銷量一般,很大一部分原因是消費者對自主品牌的不信任,也有一些人覺得艾瑞澤7價格稍貴,畢竟它的親弟弟艾瑞澤5的銷量非常好。艾瑞澤7的售價區間為7。99-9。59萬元,1。5T車型的起售價也是為7。99萬元,預測同等配置的1。

最近,我們得到了一些關於奇瑞艾瑞澤7的1.5T自動擋車型的路試照片,新車將會在2017年上市銷售。現款的艾瑞澤7的1.5T車型只配備了5擋手動變速箱,這對於那些既想要大動力又想要自動擋的消費者就感到比較痛苦了。

選擇1.6L車型吧,動力較弱。選擇1.5T車型吧!動力是足夠了,但是就是手動擋開着會比較累。所以奇瑞也意識到了這個問題,抓緊給艾瑞澤7的1.5T車型配備自動擋,豐富自己的產品線,以滿足消費者日趨多樣化的選擇。

從外觀上來看,這次曝光的1.5T自動擋車型和現款車型基本一致,畢竟只是增加了一款車型,又不是改款或者換代,所以外觀是不會有很大變化的。

前臉依舊是“X”造型的設計,前大燈靠內側部分採用了熏黑的處理,以增加運動感。現款車型已經是標配了日間行車燈了,作為自動檔車型自然不可缺少。尾部的“TCI”說明了它是1.5T車型的身份。

內飾也是和現款基本一致,看起來也比較時尚,目測做工應該不錯。主要的變化是由手動擋換車了自動擋。同時配置也比較豐富,ESp、上坡輔助、胎壓監測、倒車雷達、真皮方向盤、GpS、中控大屏幕、藍牙、手機映射等都會配備。

至於動力系統,新車肯定搭載1.5L渦輪增壓發動機,但是變速箱現在還沒有確定的消息,有可能是CVT,也有可能是和瑞虎7一樣的6速雙離合。不過,編者推測雙離合的概率會更大一點。

其實編者一直覺得艾瑞澤7是一款質感非常不錯的車子,四輪獨立懸挂,1.5T發動機動力十足,配置也很厚道,做工也不錯,行駛質感在同級別處於領先地位,操控較好。但是就是銷量一般,很大一部分原因是消費者對自主品牌的不信任,也有一些人覺得艾瑞澤7價格稍貴,畢竟它的親弟弟艾瑞澤5的銷量非常好。

艾瑞澤7的售價區間為7.99-9.59萬元,1.5T車型的起售價也是為7.99萬元,預測同等配置的1.5T自動擋車型將會比手動擋車型最低貴8000元,所以自動擋的售價將會接近9萬元。對於這個價格,你能接受么?

競爭對手

吉利帝豪GL

指導價:7.88-11.38萬

帝豪GL的1.3T自動擋車型的起售價為9.78萬,這價格要比艾瑞澤7稍微貴一點,但是帝豪GL的熱度要比艾瑞澤7大很多。作為目前比較熱門的一款車,帝豪GL將是艾瑞澤7的強大對手。

長安逸動

指導價:8.09-24.99萬

逸動的自動擋車型的起步價為8.99萬元,搭配4AT變速箱,目前還有着七八千的優惠,雖然價格可能比艾瑞澤7便宜,但是逸動的發動機為1.6L 125馬力。

一汽-大眾-寶來

指導價:10.78-15.38萬

寶來自動擋的起售價為11.98萬,目前也有着一兩萬的優惠,是加一些錢買寶來還是直接買艾瑞澤7?這是一個值得思考的問題。

所以說艾瑞澤7上市之後會面臨很多強大的對手,但是編者相信只要價格足夠接地氣,就不用發愁銷量問題。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

※回頭車貨運收費標準

動手造輪子:實現一個簡單的依賴注入(三) — 支持屬性注入

2{icon} {views}

動手造輪子:實現一個簡單的依賴注入(三) — 支持屬性注入

Intro

前面寫了幾篇依賴注入的文章,有興趣的小夥伴可以參考文末 Reference 部分中的鏈接,一直有小夥伴希望增加屬性注入的支持,昨天試着加了一下,思路很簡單,在獲取到服務實例之後檢查實例中有沒有需要注入的屬性,如果有並且不為 null 就從服務容器中獲取一個對應屬性類型的實例

代碼修改

FromServiceAttribute

完整的代碼修改可以參考這個 commit https://github.com/WeihanLi/WeihanLi.Common/commit/91dc0b515d12e7c036771fba9419824cd0219544

首先我們需要增加一個 FromServiceAttribute 用來標識哪些屬性需要注入,代碼如下:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
public sealed class FromServiceAttribute : Attribute
{
}

這裏 AttributeTargets 除了屬性之外增加了字段和參數,是想可能以後會用到,參數典型的應用場景就是類似於 asp.net core 里的 [FromServices] 用來實現方法注入參數

EnrichObject

增加了一個 EnrichObject 方法,用來在獲取到服務實例之後,對服務實例做一些補充的配置,如我們要加的屬性注入,如果我們要加字段注入等也可以在這個方法內完成,來看實現:

private object EnrichObject(object obj)
{
    if (null != obj)
    {
        // PropertyInjection
        var type = obj.GetType();
        foreach (var property in CacheUtil.TypePropertyCache.GetOrAdd(type, t => t.GetProperties())
            .Where(x => x.IsDefined(typeof(FromServiceAttribute))))
        {
            if (property.GetValueGetter()?.Invoke(obj) == null)
            {
                property.GetValueSetter()?.Invoke(
                    obj,
                    GetService(property.PropertyType)
                    );
            }
        }
    }

    return obj;
}

上面的邏輯就是獲取這個 object 定義的所有需要注入的屬性,如果屬性的值不為 null 則,從服務容器中獲取對應的服務實例,之所以要檢查是不是null

上面的 CacheUtil.TypePropertyCache 是一個 Type 為 key,PropertyInfo 數組為 Value 的併發字典,用來緩存類型的屬性

GetValueGetter/GetValueSetter 是 PropertyInfo 的擴展方法,利用表達式樹和緩存提高屬性 Get/Set 的效率

GetSertviceInstance

修改原來的 GetServiceInstance 方法為 GetServiceInstanceInternal,增加一個一樣的方法,實現邏輯是在 GetServiceInstanceInternal 的基礎上調用上面的 Enrich 方法來實現屬性注入

More

雖然增加了屬性注入的支持,但是還是不太推薦使用,從上面屬性注入的代碼中可以看得到,如果用不好很容易出現循環依賴的問題,而且用構造器注入的話依賴關係很清晰,分析方法的構造方法即可,如果要使用屬性注入請謹慎使用

Reference

  • https://github.com/WeihanLi/WeihanLi.Common/commit/91dc0b515d12e7c036771fba9419824cd0219544
  • https://github.com/WeihanLi/WeihanLi.Common/tree/dev/src/WeihanLi.Common/DependencyInjection
  • https://www.cnblogs.com/weihanli/p/implement-dependency-injection.html
  • https://www.cnblogs.com/weihanli/p/implement-dependency-injection-01.html
  • https://www.cnblogs.com/weihanli/p/implement-dependency-injection-02.html

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

※回頭車貨運收費標準

帶你輕鬆了解C# Lock 關鍵字

2{icon} {views}

  相信絕大多數.NET玩家和我一樣,常常使用Timer這個對象,而在WPF中使用DispatcherTimer的人也是很多,DispatcherTimer是在UI線程跑的。我們的程序中大多數都會充斥很多Timer,可以理解它是一個線程,它繼承自 System.Windows.Threading 。

  程序中也許會有一些靜態變量或是單例模式的對象來讓不同的頁面進行交互,但也就是這樣讓每個線程之間打架提供了基礎。因為資源是單獨的,就像是腳踩兩隻船的人,必定會翻車。例如一個List集合,你在一個線程中對它進行了操作,在同步瞬間的另線程中,如果不對它謹慎處理,就會造成 “集合已修改;可能無法執行枚舉操作”。當然我們說的不是關於集合的相關問題,而是關於資源分配的,當然在資源搶奪上,是在耗時的線程中才會出現的,例如下面的這張圖。

 

  這種耗時的操作,並且在同步線程中,沒有對線程進行封裝,很容易造成資源搶奪問題,假如Object是個集合,我在中間把它改了,下一秒的其它線程對它進行臟讀了,就會產生錯誤,我們可以通過Lock關鍵字。

  首先在Microsoft文檔中對Lock的說明是,lock 關鍵字可以用來確保代碼塊完成運行,而不會被其他線程中斷。這是通過在代碼塊運行期間為給定對象獲取互斥鎖來實現的。

  不過我們需要注意的是Lock本質上Monitor.Enter,Monitor.Enter會使值類型裝箱,每次Lock的是裝箱后的對象。Lock其實是類似編譯器的語法糖,因此編譯器直接限制住不能lock值類型,為啥呢,你仔細想想,每次裝箱后都是不同的對象,我怎麼判斷? object.ReferenceEquals 每次都是false…還有就是千萬不要Lock 字符串,簡單來說Lock字符串之後,只要是你以後有字符串匹配和你Lock里的內容有一樣的,那個該字符串也會被鎖定,相當於死鎖了。

  Lock和Monitor的區別不是很大,具體看以下代碼。

private static object obj = new object();
        public void LockSomething()
        {
            lock (obj)
            {
                dosomething();
            }
        }
        public void MonitorSomeThing()
        {
                Monitor.Enter(obj);
                dosomething();
                Monitor.Exit(obj);
        }
        public void dosomething()
        { 
            //做具體的事情
        }

   lock和Monitor是.NET用一個特殊結構實現的,Monitor對象是完全託管的、完全可移植的,並且在操作系統資源要求方面可能更為有效,同步速度較快,但不能跨進程同步。主要作用是鎖定臨界區,使臨界區代碼只能被獲得鎖的線程執行。Monitor.Wait和Monitor.Pulse用於線程同步,類似信號操作,個人感覺使用比較複雜,容易造成死鎖。

  lock就是封裝了Monitor.Enter和Monitor.Exit方法其實非常不難理解,只要確定Lock在啥時候用,該怎麼用就可以了,總結一句話。經常會應用於防止多線程操作導致公用變量值出現不確定的異常,用於確保操作的安全性。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

用路虎給公司女同事一個聖誕驚喜

4{icon} {views}

主角到場,似乎激動得說不出話了,這是要求婚的節奏。顏值擔當:小喬Jacky深情演唱。攝影師:費玉清-如果我是DJ。後期剪輯:子詠運營:苦瓜。帥X主持人:張濤靈魂字幕君:KAM知道你們嫉妒我的顏。我就靜靜的看你們裝逼。祝大家聖誕快樂。

眼看幾年即將結束,為了給公司勞苦功高的女同事一個浪漫的聖誕之夜,TV的小夥伴們精心策劃了一個聖誕party。

有夢想的男人:大宇宙哥

7200干他:Jacky

滿滿一車東西,滿滿的都是驚喜,出發!

我曾經跨過高山大海,現在就經常買買菜。

包裝師:雞爺

悉心裝飾現場。

恩,小喬會不會感動就靠你了。

就等夜晚降臨。

主角到場,似乎激動得說不出話了,這是要求婚的節奏?

顏值擔當:小喬

Jacky深情演唱。

攝影師:費玉清-如果我是DJ。

後期剪輯:子詠

運營:苦瓜。

帥X主持人:張濤

靈魂字幕君:KAM

知道你們嫉妒我的顏。

我就靜靜的看你們裝逼。

祝大家聖誕快樂!

本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

痞子衡嵌入式:鏈接函數到8字節對齊地址或可進一步提升i.MXRT1xxx內核執行性能

1{icon} {views}

  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是i.MXRT上進一步提升代碼執行性能的經驗

  今天跟大家聊的這個話題還是跟痞子衡最近這段時間參与的一個基於i.MXRT1170的大項目有關,痞子衡在做其中的開機動畫功能,之前寫過一篇文章 《降低刷新率是定位LCD花屏显示問題的第一大法》 介紹了開機動畫功能的實現以及LCD显示注意事項,在此功能上,痞子衡想進一步測試從芯片上電到LCD屏显示第一幅完整圖像的時間,這個時間我們暫且稱為1st UI時間,該時間的長短對項目有重要意義。

  痞子衡分別測試了代碼在XIP執行下和在TCM里執行下的1st UI時間,得到的結果竟然是XIP執行比TCM執行還要快50ms,這是怎麼回事?這完全顛覆了我們的理解,i.MXRT上TCM是與內核同頻的,Flash速度遠低於TCM。如果是XIP執行,即使有I-Cache加速,也最多與TCM執行一樣快,怎麼可能做到比TCM執行快這麼多。於是痞子衡便開始深挖這個奇怪的現象,然後發現了進一步提升代碼執行性能的秘密。

一、引出計時差異問題

  痞子衡的開機動畫程序是基於 \SDK_2.x.x_MIMXRT1170-EVK\boards\evkmimxrt1170\jpeg_examples\sd_jpeg 例程的,只是去了SD卡和libjpeg庫相關代碼。工程有兩個build,一個是TCM里執行(即debug),另一個是XIP執行(即flexspi_nor_debug)。

  項目板上的Flash型號是MX25UW51345G,痞子衡將其配成Octal mode, DDR, 166MHz用於啟動。項目板上還有兩個LED燈,痞子衡在LED燈上飛了兩根線,連同POR引腳一起連上示波器,用於精確測量1st UI各部分時間組成。

  示波器通道1連接POR引腳,表明1st UI時間起點;通道2連接LED1 GPIO,表明ROM啟動時間(進入用戶APP的時間點);通道3連接LED2 GPIO,做兩次電平變化,分別是1st圖像幀開始和結束的時間點。翻轉LED GPIO代碼位置如下:

void light_led(uint32_t ledIdx, uint8_t ledVal);

void SystemInit (void) {
    // 將LED1置1,標示ROM啟動時間
    light_led(1, 1);

    SCB->CPACR |= ((3UL << 10*2) | (3UL << 11*2));

    // ...
}

void APP_InitDisplay(void)
{
    // ...

    g_dc.ops->enableLayer(&g_dc, 0);

    // 將LED2置1,標示1st圖像幀開始時間點
    light_led(2, 1);
}

int main(void)
{
    BOARD_ConfigMPU();
    BOARD_InitBootPins();
    BOARD_BootClockRUN();
    BOARD_ResetDisplayMix();

    APP_InitDisplay();

    while (1)
	{
	    // ...
	}
}

static void APP_BufferSwitchOffCallback(void *param, void *switchOffBuffer)
{
    s_newFrameShown = true;

    // 將LED2置0,標示1st圖像幀結束時間點
    light_led(2, 0);
}

  上圖是痞子衡抓到的波形(30Hz,XIP),痞子衡一共做了四次測試,分別是30Hz LCD刷新率下的XIP/TCM以及60Hz LCD刷新率下的XIP/TCM,結果如下錶所示。表中的Init Time一欄表示的是開機動畫程序代碼執行時間(從SystemInit()函數開始執行到APP_InitDisplay()函數結束的時間),可以看到TCM執行比XIP執行慢近50ms,這便是奇怪問題所在。

代碼位置 LCD刷新率 POR Time Boot Time Init Time Launch Time
XIP 30Hz 3.414ms 10.082ms 34.167ms + 153ms 32.358ms
TCM 30Hz 3.414ms 10.854ms 33.852ms + 203ms 32.384ms
XIP 60Hz 3.414ms 9.972ms 18.142ms + 153ms 16.166ms
TCM 60Hz 3.414ms 10.92ms 17.92ms + 203ms 16.104ms

二、定位計時差異問題

  對於開機動畫代碼,XIP執行比TCM執行快這個結果,痞子衡是不相信的,於是痞子衡便用二分法逐步查找,發現時間差異是BOARD_InitLcdPanel()函數里的DelayMs()調用引起的,這些人為插入的延時是LCD屏控制器手冊里的要求,總延時時間應該是153ms,但是這個函數的執行在XIP下(153ms)和TCM里(203ms)時間不同。

static void BOARD_InitLcdPanel(void)
{
    // ...

#if (DEMO_PANEL ==  DEMO_PANEL_TM103XDKP13)
    // ...

    /* Power LCD on */    
    GPIO_PinWrite(LCD_RESET_GPIO, LCD_RESET_GPIO_PIN, 1);
    DelayMs(2);
    GPIO_PinWrite(LCD_RESET_GPIO, LCD_RESET_GPIO_PIN, 0);
    DelayMs(5);
    GPIO_PinWrite(LCD_RESET_GPIO, LCD_RESET_GPIO_PIN, 1);
    DelayMs(6);
    GPIO_PinWrite(LCD_STBYB_GPIO, LCD_STBYB_GPIO_PIN, 1);
    DelayMs(140);
#endif
    // ...
}

  所以現在的問題就是為何在TCM里執行DelayMs(153)需要203ms,而XIP執行下是精確的。讓我們進一步查看DelayMs()函數的原型,這個函數其實調用的是SDK_DelayAtLeastUs()函數,SDK_DelayAtLeastUs()函數從命名上看就很有意思,AtLeast即保證軟延時一定能滿足用戶設置的時間,但也可能超過這個時間。為何是AtLeast設計,其實這裏就涉及到Cortex-M7內核一個很重要的特性 – 指令雙發射,軟件延時的本質是靠CPU執行指令來消耗時間,但是CPU拿指令到底是單發射還是雙發射有一定的不確定性,因此無法做到精確,如果以全雙發射來計算,就能得出最小延時時間。

#define DelayMs                  VIDEO_DelayMs

#if defined(__ICCARM__)
static void DelayLoop(uint32_t count)
{
    __ASM volatile("    MOV    R0, %0" : : "r"(count));
    __ASM volatile(
        "loop:                          \n"
        "    SUBS   R0, R0, #1          \n"
        "    CMP    R0, #0              \n"
        "    BNE    loop                \n");
}
#endif

void SDK_DelayAtLeastUs(uint32_t delay_us, uint32_t coreClock_Hz)
{
    assert(0U != delay_us);
    uint64_t count = USEC_TO_COUNT(delay_us, coreClock_Hz);
    assert(count <= UINT32_MAX);

#if (__CORTEX_M == 7)
    count = count / 3U * 2U;
#else
    count = count / 4;
#endif
    DelayLoop(count);
}

void VIDEO_DelayMs(uint32_t ms)
{
    SDK_DelayAtLeastUs(ms * 1000U, SystemCoreClock);
}

  分析到現在,問題已經轉化成為何XIP下執行指令雙發射概率比TCM里執行指令雙發射概率更大,關於這個現象並沒有在ARM官方文檔里查找到相關信息,DelayLoop()循環里只是3條指令,XIP下執行肯定是在Cache line里,這跟在TCM里執行並沒有什麼區別。讓我們再去看看兩個工程的map文件,找到DelayLoop()函數鏈接地址,這個函數在兩個測試工程下鏈接地址對齊不一樣,這意味着測試條件不完全相同,或許這是一個解決問題的線索。

  XIP執行工程(flexspi_nor_debug),DelayLoop()函數地址8字節對齊:

*******************************************************************************
*** ENTRY LIST
***

Entry                       Address   Size  Type      Object
-----                       -------   ----  ----      ------
DelayLoop               0x3000'3169    0xa  Code  Lc  fsl_common.o [1]

  TCM執行工程(debug工程),DelayLoop()函數地址4字節對齊:

*******************************************************************************
*** ENTRY LIST
***

Entry                       Address   Size  Type      Object
-----                       -------   ----  ----      ------
DelayLoop                    0x314d    0xa  Code  Lc  fsl_common.o [1]

三、找到計時差異本質

  前面找到DelayLoop()函數鏈接地址差異是一個線索,那我們就針對這個線索做測試,不再讓鏈接器自動分配DelayLoop()函數地址,改為在鏈接文件里指定地址去鏈接,下面代碼是IAR環境下的示例,我們使用debug工程(即在TCM執行)來做測試。

  C源文件中在DelayLoop()函數定義前加#pragma location = “.myFunc”,即將該函數定義為.myFunc的段,然後在鏈接文件icf中用place at語句指定.myFunc段到固定地址m_text_func_start處開始鏈接:

#if defined(__ICCARM__)
#pragma location = ".myFunc"
static void DelayLoop(uint32_t count)
{
    // ...
}
#endif
define symbol m_text_func_start        = 0x00004000;

place at address mem: m_text_func_start     { readonly section .myFunc };

define symbol m_text_start             = 0x00002400;
define symbol m_text_end               = 0x0003FFFF;

place in TEXT_region                        { readonly };

  根據鏈接起始地址m_text_func_start的不同,我們得到了不同的結果,如下錶所示。至此真相大白,造成DelayMs()函數執行時間不同的根本原因不是XIP/TCM執行差異,而是鏈接地址對齊差異,8字節對齊的函數更容易觸發CM7指令雙發射,相比4字節對齊的函數在性能上能提升24.8% 。

m_text_func_start值 鏈接地址對齊 函數調用語句 實際執行時間
0x00004000 8n字節 DelayMs(100) 100ms
0x00004002 2字節,未能鏈接 N/A N/A
0x00004004 4字節 DelayMs(100) 133ms
0x00004008 8字節 DelayMs(100) 100ms

  現在我們得到了一個有趣的結論,Cortex-M7上將函數鏈接到8字節對齊的地址有利於指令雙發射,這就是進一步提升代碼執行性能的秘密。

  至此,i.MXRT上進一步提升代碼執行性能的經驗痞子衡便介紹完畢了,掌聲在哪裡~~~

歡迎訂閱

文章會同時發布到我的 博客園主頁、CSDN主頁、微信公眾號 平台上。

微信搜索”痞子衡嵌入式“或者掃描下面二維碼,就可以在手機上第一時間看了哦。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

年輕人都想要的運動溜背SUV 居然只要5萬多

4{icon} {views}

隔音經不起考驗在低速時,瑞風S2的隔音還是不錯的,但是上到高速以後,風噪、路噪和發動機噪音都會傳到車廂內。總體來講,瑞風S2的隔音較為一般。後排表現有好也有壞瑞風S2的後排腿部空間充裕,但是頭部空間會顯得局促。

前言

瑞風S2作為S3的小弟,雖然銷量上沒有大哥那麼火爆,但是綜合實力同樣不可小覷。實際表現到底如何,下面編者我就給大家好好說一下。

江淮汽車-瑞風S2

指導價:5.88-7.68萬

外觀光鮮亮麗

瑞風S2的車身尺寸為4135*1750*1568mm,軸距為2490mm。得益於車身較寬,整個前臉看上去很飽滿有力,中間幾條鍍鉻裝飾條把車頭點綴得很閃亮。

車側的設計有一點點怪異,主要是門把手的設計不在一條直線上而是呈一定角度向後揚,輪轂的樣式則很像一股旋風。

尾門的設計不夠大氣,同時導致地台的開起角度偏高。兩大燈之間用了凸起的線條來連接顯得突兀,隱藏式的排氣讓尾部下方很乾凈。

內飾平平無奇

一眼看去,瑞風S2的中控台給人滿滿的塑料感,紅色與黑色的搭配使用並沒有帶來一種亮麗的效果,反而更顯廉價。車門上的銀色護板設計算是內飾中為數不多的亮點。

動力數據優於同級對手

瑞風S2隻有一副1.5L自然吸氣發動機,最大輸出113馬力和146牛米。這個數據無論是哈弗H1還是長安CS15,都無法與之匹敵。與這副發動機匹配的是5擋手動變速箱和CVT變速箱,整體的動力表現一般,因為這個級別的SUV多是搭載1.5L發動機,導致先天動力不夠充足,而瑞風S2的車身更為龐大,所以在高轉時的發力不太好,在2000到3000轉是車子的最佳動力區間。

底盤表現中規中矩

毫無意外地,瑞風S2的后懸架也是使用扭力梁式非獨立懸架。在面對震動時的過濾表現得不錯,但是當路面較為複雜,需要去連續吸收和回彈時,瑞風S2總是餘震不斷,不夠利索。

隔音經不起考驗

在低速時,瑞風S2的隔音還是不錯的,但是上到高速以後,風噪、路噪和發動機噪音都會傳到車廂內。總體來講,瑞風S2的隔音較為一般。

後排表現有好也有壞

瑞風S2的後排腿部空間充裕,但是頭部空間會顯得局促。中央的凸起不高,座椅雖然寬大,但是包裹性不強。

油耗與保養費用

多位車主反映瑞風S2手動擋車型的百公里綜合油耗為8.1L,而自動擋車型為8.9L。6萬公里的總保養費用上,手動擋車型為4639元,而自動擋車型為4585元。

油耗上的表現偏高,而保養費用則在合理範圍內。

配置分析

瑞風S2的2017款車型全系標配ESp,這點很厚道。

手動擋車型我會推薦買指導價為5.88萬的17款手動舒適型,即最低配。因為這個配置已經包含了一些實用配置,不過沒有倒車雷達,這個可以自己後期加裝,沒必要為此加多4000元上手動豪華型。

自動擋車型我會建議買指導價為7.08萬的15款CVT豪華型,即自動擋的最低配。雖然是最低配,但也已經配有了主副駕駛座安全氣囊、中控彩色大屏、ESp和倒車雷達等實用配置。需要注意的是,15款車型的車標還是五角星而非英文字母。

編者總結

瑞風S2價格較低,不過即將迎來寶駿510的挑戰,恐怕也會有些難以抵擋。但是,作為這個價格區間中,少有的帶自動擋的車型,相信瑞風S2還是可以俘獲不少消費者的心。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化