99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

使用LocalDate和LocalDateTime

Android編程精選 ? 來源:Android編程精選 ? 作者:Android編程精選 ? 2022-07-04 11:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

史蒂夫.喬布斯說,”復雜的終極境界是簡單“,同樣的優(yōu)雅的代碼一定是精簡明了,可讀性好。

使用LocalDate和LocalDateTime

LocalDate精確到日期,LocalDateTime精確到時分秒。優(yōu)化前14行代碼


	
  1. try {

  2. SimpleDateFormat sdfDay = new SimpleDateFormat("yyyy-MM-dd");

  3. SimpleDateFormat sdfMins = new SimpleDateFormat("yyyy-MM-dd HHss");

  4. Date now = new Date();

  5. String today = sdfDay.format(now);

  6. String waterStart = today + " 0300";

  7. String waterEnd = today + " 0400";

  8. Date waterStartTime = sdfMins.parse(waterStart);

  9. Date waterEndTime = sdfMins.parse(waterEnd);

  10. } catch (ParseException pe) {

  11. return XX;

  12. }

優(yōu)化后3行代碼


	
  1. LocalDateTime now = LocalDateTime.now();

  2. LocalDateTime waterStart = LocalDateTime.of(now.getYear(), now.getMonth(),now.getDayOfMonth(),3,0);

  3. LocalDateTime waterEndTime =LocalDateTime.of(now.getYear(), now.getMonth(),now.getDayOfMonth(),4,0);

默認值使用Optional

優(yōu)化前五行


	
  1. if (null == status) {

  2. param.put("status", new ArrayList<String>());

  3. } else {

  4. param.put("status", status);

  5. }

優(yōu)化后一行,使用JDK8的Optional


	
  1. Optional.ofNullable(status).orElse(new ArrayList<String>());

如果是字符串可以用


	
  1. StringUtils.defaultIfEmpty(status,"")

字符串累加

字符串只要不在for循環(huán)里累加,可以直接用+號,因為編譯成字節(jié)碼后會變成StringBuilder,如果在for循環(huán)里面用+號會生成多個StringBuilder,所以在for循環(huán)里累加最好在循環(huán)外創(chuàng)建StringBuilder。優(yōu)化前五行


	
  1. StringBuffer sblog = new StringBuffer();

  2. sblog.append("waterDriven|sellerId=");

  3. sblog.append(request.getSellerTaobaoId());

  4. sblog.append("|result=");

  5. sblog.append(isSuccess);

優(yōu)化后一行


	
  1. String sblog="waterDriven|sellerId="+request.getSellerTaobaoId()+"|result="+isSuccess;

以上場景用逗號和等號連接數(shù)據(jù),使用GUAVA的Joiner更精簡,可讀性更好


	
  1. String sblog=Joiner.on("|").withKeyValueSeparator("=").join(ImmutableMap.of("sellerId", request.getSellerTaobaoId(), "result", isSuccess))

LIST TO MAP

優(yōu)化前4行


	
  1. Map<String, String> AssetsMetaIdMap = Maps.newHashMap();

  2. for (AssetsInfoBO assetsInfoBO : request.getAssetsCollectionList()) {

  3. AssetsMetaIdMap.put(assetsInfoBO.getAssetMetadataId(), assetsInfoBO.getAssetMetadataId());

  4. }

優(yōu)化后1行


	
  1. Map<String, String> AssetsMetaIdMap = request.getAssetsCollectionList().stream().collect(Collectors.toMap(Hosting::getAssetMetadataId, Hosting::getAssetMetadataId));

如果key重復會拋出異常


	
  1. Exception in thread "main" java.lang.IllegalStateException: Duplicate key 80000

減少不需要的判斷

優(yōu)化前5行


	
  1. String requestId = null;

  2. if (null != request.getExtData()) {

  3. requestId = request.getExtDataValue(REQUEST_ID_KEY);

  4. }

  5. return requestId;

優(yōu)化后1行


	
  1. return request.getExtDataValue(REQUEST_ID_KEY);

去掉else

優(yōu)化前5行


	
  1. if (null != result && StringUtils.isNotBlank(no)) {

  2. return no;

  3. } else {

  4. throw new RuntimeException("XX");

  5. }

優(yōu)化后4行


	
  1. if (null != result && StringUtils.isNotBlank(no)) {

  2. return no;

  3. }

  4. throw new RuntimeException("XX");

不要返回布爾

優(yōu)化前5行


	
  1. if ("true".equalsIgnoreCase(value.toString())) {

  2. invoke = true;

  3. } else {

  4. invoke = false;

  5. }

優(yōu)化后一行


	
  1. invoke = "true".equalsIgnoreCase(value.toString());

使用級聯(lián)

優(yōu)化前5行


	
  1. ParamBO paramBO = new ParamBO();

  2. paramBO.setId(1);

  3. paramBO.setName(”ifeve“);

  4. paramBO.setOld(7);

優(yōu)化后1行


	
  1. new ParamBO().withId(1).withName("ifeve").withOld(7);

-End-

審核編輯 :李倩


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

    關注

    30

    文章

    4900

    瀏覽量

    70753
  • LOCA
    +關注

    關注

    0

    文章

    11

    瀏覽量

    7241

原文標題:幾個代碼瘦身優(yōu)化的案例

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    “諾基亞”推新款功能機,搭載DeepSeek AI助手

    電子發(fā)燒友網(wǎng)綜合報道?最近諾基亞在京東自營旗艦店推出了兩款帶有AI功能的手機,HMD101?4G?和HMD102?4G,售價分別為149元和169元,102相比101增加了攝像頭。 ? HMD101?4G?和HMD102?4G上沒有帶有諾基亞的Logo,而是使用了HMD品牌,官方宣稱采用諾基亞手機制造工藝與測試標準。通過主鍵30萬次按壓、耳機接口插拔3000次、USB插拔1萬次、滾筒測試200圈、-30℃~70℃24小時冷熱沖擊等測試。 ? 來源:諾基亞手機京東自營旗艦店 ? 在介紹頁面中,這兩款手機面向長輩、
    的頭像 發(fā)表于 07-20 00:04 ?1473次閱讀
    “諾基亞”推新款功能機,搭載DeepSeek AI助手

    deepin亮相2025 RISC-V中國峰會,展現(xiàn)開源生態(tài)無限可能

    ? 2025 年 7 月 19 日,為期四天的第五屆 RISC-V 中國峰會在上海張江科學會堂圓滿落幕。本次峰會匯聚了全球 RISC-V 領域的頂尖企業(yè)、研究機構和開源社區(qū),共同探討?RISC-V 技術的創(chuàng)新與應用。 作為國內(nèi)領先的桌面操作系統(tǒng)社區(qū),deepin 深度參與了此次盛會,通過一系列硬核展示和互動活動,全面彰顯了其在 RISC-V 生態(tài)建設中的重要貢獻和技術實力。 無約束的自由展示:流暢體驗最新桌面系統(tǒng) 在峰會現(xiàn)場,deepin-ports SIG 為與會者帶來了前所未有的自由體驗。
    的頭像 發(fā)表于 07-19 17:35 ?32次閱讀
    deepin亮相2025 RISC-V中國峰會,展現(xiàn)開源生態(tài)無限可能

    中微愛芯2K FLASH ROM的AD型8位微控制器代理供應

    AiP8F102G 2K FLASH ROM的AD型8位微控制器 AiP8F102G是一塊8位的單片機電路,主要應用于為家電產(chǎn)品提供高抗干擾性能解決方案。 主要特點 ? 存儲器配置 ? FLASH ROM 空間:2K * 16 位。 ? RAM 空間:128字節(jié)。 ? 8層堆棧緩存器 ? 4個中斷源 ? 3個內(nèi)部中斷源:T0、TC0、ADC ? 1個外部中斷源:INT0 ? I/O引腳配置 ? 輸入輸出雙向端口:P0、P4、P5。 ? 具有喚醒功能的端口:P0電平觸發(fā) ? 內(nèi)置上拉電阻端口:P0、P4、P5。 ? 外部中斷引腳:P0.0 ? ADC輸入引腳:AIN0~AIN4,AIN6,AIN7 ? ADC外部基準輸入P40 ? FCPU(指令周期) ? Fcpu=Fosc/4、Fosc/8、Fosc/16 ? 強大的指令系統(tǒng) ? 指令長度為1個字 ? 大部分指令只需要一個時鐘周期 ? 跳轉(zhuǎn)指令JMP可在整個ROM區(qū)執(zhí)行 ? 查表指令MOVC可尋址整個ROM區(qū) ? 1個8位定時/計數(shù)器、一個可配置8位/16位定時器 ? T0:基本定時器 ? TC0:8位/16位自動裝載定時器/計 數(shù)器/PWM/ Buzzer 輸出。 ? 單通道8位PWM輸出 單通道2kHz/4kHz蜂鳴器輸出 ? 內(nèi)置看門狗定時器,其時鐘源由內(nèi)部低速RC振蕩器提供(16kHz @3V,32kHz @5V) ? 7通道12位ADC ? ADC-VREF ? ADC基準(VDD/4V/3V/2V) ? ADC自校準功能 ? 4種時鐘系統(tǒng) ? 內(nèi)部高速RC:16MHz@VDD=5V ? 內(nèi)部低速RC:32kHz@VDD=5V ? 外部高速晶振:16MHz ? 外部低速晶振:32kHz ? 4種工作模式 ? 普通模式:高、低速時鐘同時工作。 ? 低速模式:只有低速時鐘工作。 ? 睡眠模式:高、低速時鐘都停止工作。 ? 綠色模式:由定時器周期性的喚醒。 ? 封裝形式 ? SOP20/SOP18/SOP16/SOP14/SOP8 ? DIP20/DIP18/DIP16/DIP14 ? TSSOP20 ? QFN16/ QFN20 ………………………………………………………………………………… 中微愛芯原廠代理,支持終端工廠,為客戶提供樣品以及相關技術咨詢 如需更多系列型號,歡迎聯(lián)系咨詢。 深圳市芯天電子有限公司馬先生:15377714475
    發(fā)表于 07-19 17:11

    固定頻率2MHZ高效率5.5V/2A同步降壓轉(zhuǎn)換器支持1.2V GPIO

    概述:PC1021是一款高效同步降壓DC/DC轉(zhuǎn)換器,輸出電流能力為2A,可調(diào)節(jié)輸出電壓。輸入電源電壓范圍為2.5V至5.5V。采用自適應關斷時間峰值電流控制,該設備的效率可達95%。該設備在中等或重負載下以準固定2MHz脈寬調(diào)制(PWM)模式運行,但在輕負載下使用跳脈沖模式進入省電模式(PSM)。PSM工作靜態(tài)電流非常低,通常為48μA,非常適合電池供電應用以延長電池壽命。盡管靜態(tài)電流如此之低,但對大負載變化的瞬態(tài)響應仍然出色。設備關機電流小于0.8μA。PC1021通過外部電阻分壓器提供可調(diào)節(jié)的輸出電壓,能夠以100%占空比進行低壓差操作。其他功能包括內(nèi)部軟啟動功能以限制浪涌電流、過流和熱關斷保護、使能輸入(EN)、輸入欠壓鎖定(UVLO)保護以及電源良好(PG)輸出。PC1021提供綠色SOT-563-6和UTDFN-1.6×1.6-6CL封裝。特性:● 輸入電壓范圍:2.5V 至 5.5V● 可調(diào)輸出電壓:0.6V 至 VIN● 效率高達 95%● 低 RDSON 開關(90mΩ/62mΩ)● PC1021A:省電模式● PC1021B:強制 PWM 模式● PC1021PA:省電模式和 PG 引腳● PC1021PB:強制 PWM 模式和 PG 引腳● 工作靜態(tài)電流:48μA(典型值)● 低dropout操作時支持 100% 占空比● PWM 開關頻率:2MHz● 支持 1.2V GPIO● 活動輸出放電● 過流保護● 熱關斷保護● 輸入欠壓鎖定(UVLO)保護● 提供綠色 SOT-563-6 和 UTDFN-1.6×1.6-6CL 封裝應用領域:智能手機通用電源供應器機頂盒網(wǎng)絡攝像頭無線路由器硬盤驅(qū)動器
    發(fā)表于 07-19 16:25

    PC1032微功率5.5V/3A高效同步降壓轉(zhuǎn)換器具有自適應關斷功能

    概述:PC1032是一款高效且體積小巧的同步降壓轉(zhuǎn)換器,適用于低輸入電壓應用。它是緊湊設計的理想解決方案。其2.5V至5.5V的輸入電壓范圍適用于幾乎所有電池供電的應用。在中等至重負載范圍內(nèi),它以1.5MHz(典型值)的PWM模式運行,并在輕負載時自動進入或退出省電模式(PSM),以保持高效率。關機時,靜態(tài)電流為0.32μA(典型值)。該器件基于自適應關斷時間架構,但仍允許使用寬范圍的輸出電容器。這種靈活性使其成為系統(tǒng)電源軌供應的良好選擇。自適應關斷時間架構提供了出色的輸出電壓精度和卓越的負載瞬態(tài)響應。只需外部前饋補償電容即可獲得更快的響應。PC1032采用綠色SOT-563-6封裝。 特性● 支持1.2V GPIO● 輸入電壓范圍為2.5V至5.5V● 可調(diào)節(jié)輸出電壓從0.6V到輸入電壓● 自適應關斷時間架構● 效率達到95%● 內(nèi)部開關低RDSON:53毫歐/28毫歐● 靜態(tài)電流為48微安(典型值)● 輕載時的省電模式● 具有100%占空比的低壓差● 電源良好輸出● 快速負載響應● 內(nèi)置軟啟動和預偏置啟動● 關機時放電輸出● 打嗝模式OCP/短路保護● 熱關斷保護● 提供綠色SOT-563-6封裝應用領域:工業(yè)和商業(yè)應用,通用負載點電源,便攜式電池供電應用,無線路由器,固態(tài)硬盤,機頂盒,多功能打印機。
    發(fā)表于 07-19 16:18

    【VisionFive 2單板計算機試用體驗】3、開源大語言模型部署

    1、ollama平臺搭建 ollama可以快速地部署開源大模型,網(wǎng)址為https://ollama.com, 試用該平臺,可以在多平臺上部署 Deepseek-R1, Qwen3, Llama, Gemma等開源大模型。當然,一些閉源的(類似chatgpt, gemini)是不支持部署的。如下圖: 在端側(cè)部署大模型,個人認為最大的好處:是可以避免因文本或圖片上傳而造成的信息泄露,因為一切文本輸入和推理都可以離線進行。 我們進到其github,發(fā)現(xiàn)其并沒有提供risc-v架構的編譯產(chǎn)物。 所以,我們需要下載源碼來編譯ollama。 Git clone https://github.com/ollama/ollama.git 需要先安裝一下編譯需要的庫: sudo apt install g++ build-essential cmake 解壓ollama源碼之后,按照ollama github里的build from source指導,進行編譯,編譯步驟如下圖所示: 在調(diào)用go run . serve發(fā)現(xiàn)抱錯:go指令不存在,這是因為VisionFive2板卡沒有安裝go,下面我們來安裝一下go 2、go安裝 進到go的官網(wǎng)https://go.dev/dl/,按照慣例,我們要找一下是否有risc-v的編譯產(chǎn)物,如果沒有的話,又得源碼編譯了。 不過,好在我們發(fā)現(xiàn)了已經(jīng)有release的risc-v的編譯產(chǎn)物了,如下圖,把紅框內(nèi)的文件下載到visionfive2的板卡上。 解壓文件,看到在go/bin/路徑下,有一個go的可執(zhí)行文件。 我們要把這個go可執(zhí)行文件添加到環(huán)境變量,具體做法是:在~/.bashrc文件最后添加下圖所示的內(nèi)容 然后 source ~/.bashrc 執(zhí)行 go version 檢查一下,go是否能夠正常運行。這里可以看到go的版本,以及編譯的系統(tǒng)和芯片架構。 3、拉取/運行大語言模型 ollama的使用方法和docker很像。 返回到ollama的編譯路徑,找到ollama可執(zhí)行文件 執(zhí)行 ./ollama run qwen3:0.6b 可以看到有個進度條在拉取0.6B的Qwen模型。當然也可以拉去deepseek的模型,如下: ./ollama run deepseek-r1:1.5b 可以選擇不同的參數(shù)量版本,參數(shù)量越大,對算力的要求越高,模型表現(xiàn)越好。 我這里就使用最小的Qwen0.5b來試一下: 拉取完畢之后,就可以在命令行輸入你想問的問題: 我讓它幫我寫一首詩,指定了主題和要表現(xiàn)的內(nèi)容: qwen0.6b的表現(xiàn):這個參數(shù)量的表現(xiàn)只能說一般?!奥犕茱w”,青蛙怎么會飛呢。 visionfive2的表現(xiàn): 執(zhí)行 ./ollama ps 可以看到當前正在運行的大模型,以及運行方式:CPU。 如果有顯卡的話,這里會顯示GPU。Visionfive2的gpu應該是不支持推理的,所以這里用的是CPU。實測下來,運行0.6B的模型,自回歸的速度大概是每2秒一個漢字。
    發(fā)表于 07-19 15:45

    工控儀表液晶驅(qū)動LCD斷碼屏驅(qū)動芯片VK1056

    產(chǎn)品型號:VK1056 產(chǎn)品品牌:VINKA永嘉微電 封裝形式:SOP24/SSOP24/DICE 產(chǎn)品年份:新年份 VK1056概述:VK1056是一個點陣式存儲映射的LCD驅(qū)動器,可支持最大56點(14SEGx4COM)的LCD屏,也支持2COM和3COM的LCD屏。單片機可通過三條通信線配置顯示參數(shù)和發(fā)送顯示數(shù)據(jù),也可通過指令進入省電模式。Z178+146 特點: ? 工作電壓 2.4-5.2V ? 內(nèi)置256 kHz RC振蕩器(上電默認) ? 偏置電壓(BIAS)可配置為1/2、1/3 ? COM周期(DUTY)可配置為1/2、1/3、1/4 ? 內(nèi)置顯示RAM為14x4位 ? 省電模式(通過關顯示和關振蕩器進入) ? Q.2.8.8.5.2.1.8.9.6.6 ? 3線串行接口 ? VLCD腳調(diào)節(jié)LCD電壓 ? 軟件配置LCD顯示參數(shù) ? 寫命令和寫數(shù)據(jù)2種命令格式 ? 寫顯示數(shù)據(jù)地址自動加1 ? VLCD腳提供LCD驅(qū)動電壓(<VDD) ? 封裝SOP24 (VK1056B)(300mil) (15.4mm x 7.5mm PP=1.27mm) SSOP24(VK1056C)(208mil) (8.2mm x 5.3mm PP=0.65mm) DICE —————————————————————————————————————————————————— RAM映射LCD控制器和驅(qū)動器系列: VK1024B 2.4V~5.2V 6seg4com 63 6*2 偏置電壓1/2 1/3 S0P-16 VK1056B 2.4V~5.2V 14seg4com 143 14*2 偏置電壓1/2 1/3 SOP-24/SSOP-24 VK1072B 2.4V~5.2V 18seg4com 183 18*2 偏置電壓1/2 1/3 SOP-28
    發(fā)表于 07-19 15:12

    隔離放大器:電子世界的&quot;翻譯官&quot;與&quot;安全衛(wèi)士&quot;

    在電子設備內(nèi)部,總在上演著驚心動魄的"諜戰(zhàn)大戲"。電流與信號如同穿梭往來的特工,有的攜帶重要情報需要精準傳遞,有的暗藏致命威脅必須嚴密隔離。在這片看不見硝煙的戰(zhàn)場上,一位身懷絕技的"特工"正默默守護著電子世界的安全秩序——它就是隔離放大器。這個看似普通的電子元件,實際上是現(xiàn)代科技設備中不可或缺的"安全衛(wèi)士"和"語言專家"。
    的頭像 發(fā)表于 07-19 14:49 ?33次閱讀

    2025中國聯(lián)通合作伙伴大會亮點:中興通訊總裁徐子陽:智聯(lián)共生 數(shù)實融合

    7 月18-19日,以“向?qū)嵧?,共?chuàng)融合新生態(tài)”為主題的2025中國聯(lián)通合作伙伴大會在上海舉行,中興通訊總裁徐子陽受邀出席大會主論壇并發(fā)表《智聯(lián)共生,數(shù)實融合》的主題演講,與業(yè)界嘉賓深入探討算網(wǎng)智融合的發(fā)展路徑,分享技術創(chuàng)新賦能實體經(jīng)濟的應用實踐與成果。 徐子陽指出,AI大模型正在引領新一輪數(shù)智浪潮,以DeepSeek為代表的高效低成本開源大模型,通過算力普惠與AI平權,加速全球智能化進程的步伐。 對此,中興通訊攜手伙伴圍繞連接升
    的頭像 發(fā)表于 07-19 14:15 ?180次閱讀
    2025中國聯(lián)通合作伙伴大會亮點:中興通訊總裁徐子陽:智聯(lián)共生 數(shù)實融合

    人工智能驅(qū)動型網(wǎng)絡情報提供商Vehere宣布推出v1.8.1

    Vehere宣布推出v1.8.1,為安全分析師提供更精準的檢測、更快的響應和更智能的工作流程 ?領先的人工智能驅(qū)動型網(wǎng)絡情報提供商Vehere,已正式推出其最新的NDR固件 v1.8.1 。該版本采用現(xiàn)代化、直觀的用戶界面,為安全團隊帶來更高運營效率。 它專為任務關鍵型環(huán)境而設計,反映了Vehere的核心理念:為防御者提供降低復雜性并加速檢測和響應的工具。 新功能及其重要性: 簡潔且現(xiàn)代化的UI界面 :簡化工作流程,減少復雜儀表板的操作時間 更智能的篩選器
    的頭像 發(fā)表于 07-19 14:08 ?58次閱讀

    【微五科技CF5010RBT60開發(fā)板試用體驗】+A/D數(shù)據(jù)采集

    從資料可以看出,CF5010RBT60能通過10個A/D檢測通道,見圖1所示。 圖1 檢測通道與引腳關系 要實現(xiàn)多通道的數(shù)據(jù)采集,我們可以從例程中來獲取經(jīng)驗。 例如在例程中就提供這樣一個函數(shù),它將相應的基本功能都涵蓋到了其中,其內(nèi)容為: void demo() { //串口4調(diào)試使能,SDK默認此串口為調(diào)試串口 #if (defined(UART4_TEST_EN) && (0 != UART4_TEST_EN)) uart4_demo(); #endif //開發(fā)板LED測試 #if (defined(LED_TEST_EN) && (0 != LED_TEST_EN)) //#if (defined(LED_TEST_EN)) led_demo(); #endif //USART測試 #if (defined(USART_TEST_EN) && (0 != USART_TEST_EN)) usart_demo(); #endif //ADC_DMA測試 #if defined(ADC_DMA_TEST_EN) adc_dma_demo(); #endif //定時器測試 #if (defined(TMR_TEST_EN) && (0 != TMR_TEST_EN)) tmr_demo(); #endif //GPIO外部中斷測試 #if (defined(GPIO_TEST_EN) && (0 != GPIO_TEST_EN)) gpio_exit_demo(); #endif //FLASH讀寫測試 #if (defined(FLASH_TEST_EN) && (0 != FLASH_TEST_EN)) flash_demo(); #endif //PWM測試 #if (defined(PWM_TEST_EN) && (0 != PWM_TEST_EN)) pwm_demo(); #endif //PWM_DMA測試 #if (defined(PWM_DMA_TEST_EN) && (0 != PWM_DMA_TEST_EN)) pwm_dma_demo(); #endif //USART1 DMA測試 #if (defined(USART1_DMA_TEST_EN) && (0 != USART1_DMA_TEST_EN)) usart_dma_demo(); #endif //USART1 DMA測試 #if (defined(ATMR_TEST_EN) && (0 != ATMR_TEST_EN)) atmr8_demo(); #endif } 按該函數(shù)的設計思想,當相應進行某種功能的測試時只要將其使能即可。但在實際測試時,確因異常而無法通過編譯。 為此,只好將所需功能的函數(shù)放置到主程序的文件中來使用。 以多通道數(shù)據(jù)檢測為例,經(jīng)測試可完成編譯的的文件內(nèi)容為: #include <stdio.h> #include \"main.h\" #defineDEBUG_PRINTF_EN1 #define ADC1_USE_CHANNEL_NUM5u//當前使用的ADC通道數(shù),即ADC轉(zhuǎn)換序列長度 #define ADC1_DMA_DATA_NUM(ADC1_USE_CHANNEL_NUM)//DMA傳輸數(shù)據(jù)數(shù),此處和ADC通道序列長度一致 Dma_Handle_Type adc_dma1_ch1_hd; //dma1通道1句柄 uint8_tadc_dma_fns = 0; //adc傳輸完成標志 uint16_t ad_dma_data[11] = {0};//11路通道的AD數(shù)值 //DMA中斷函數(shù) void __attribute__((interrupt(\"SiFive-CLIC-preemptible\"))) Dma1_Channel1_Irq_Lc11(void) { Dma_Global_IRQHandler(&adc_dma1_ch1_hd); } //DMA發(fā)送完成中斷回調(diào)函數(shù) void adc_dma_trsf_fns_cb(struct __Dma_Handle_Type *dma_hdl) { //cfprintf(\"tr ok\\\\n\"); adc_dma_fns = 1; } //DMA發(fā)送一半中斷回調(diào)函數(shù) void adc_dma_trsf_half_cb(struct __Dma_Handle_Type *dma_hdl) { //cfprintf(\"tr half\\\\n\"); } //DMA錯誤中斷回調(diào)函數(shù) void adc_dma_trsf_err_cb(struct __Dma_Handle_Type *dma_hdl) { cfprintf(\"tr err\\\\n\"); adc_dma_init(); } void adc_dma_init(void) { RCC_Peripheral_ClockEn(DMA1CLC); //開啟dma1時鐘 adc_dma1_ch1_hd.dma_base = DMA1; adc_dma1_ch1_hd.dma_channel = DMA1_Channel1;//使用通道1,詳細的DMA通道和外設事件對應關系,在參考手冊7.22.3.7 DMA 請求映像 adc_dma1_ch1_hd.half_transfer_complete_Callback = NULL;//adc_dma_trsf_half_cb; adc_dma1_ch1_hd.transfer_complete_Callback = adc_dma_trsf_fns_cb; adc_dma1_ch1_hd.transfer_error_Callback = adc_dma_trsf_err_cb; Dma_Init_Parameter cfg; cfg.direction = DMA_PERIPH_TO_MEMORY; cfg.memory_addr = (uint32_t)ad_dma_data; cfg.memory_data_size = DMA_MDATAALIGN_HALFWORD; cfg.memory_inc = DMA_MINC_ENABLE; cfg.number = ADC1_DMA_DATA_NUM; cfg.periph_addr = (uint32_t)&ADC1->DR; cfg.periph_data_size = DMA_PDATAALIGN_HALFWORD; cfg.periph_inc = DMA_PINC_DISABLE; cfg.priority = DMA_PRIORITY_HIGH; Dma_Init(&adc_dma1_ch1_hd,&cfg);//初始化dma Dma_Interupt_Config int_cfg; int_cfg.half_transfer_it = DMA_IT_HALF_TRANSFER; int_cfg.transfer_complete_it = DMA_IT_TRANSFER_COMPLETE; int_cfg.transfer_error_it = DMA_IT_TRANSFER_ERROR; Dma_Interrupt_Enable(&adc_dma1_ch1_hd,&int_cfg); Clic_Interrupt_Enable(INT_ID_DMA1_CHAN1); Dma_Circulation_Enable(&adc_dma1_ch1_hd);//循環(huán)傳輸 Dma_Start(&adc_dma1_ch1_hd);//開啟dma通道1 } void usr_adc_init(void) { adc_dma_init();//adc dma初始化 //開啟ADC時鐘 RCC_Peripheral_ClockEn(ADCCLC); cfprintf(\"adinit\\\\n\"); ADC_InitTypeDef cfg; ADC_StructInit(&cfg); cfg.ADC_ContinuousConvMode = DISABLE; cfg.ADC_DataAlign = ADC_DataAlign_Right; cfg.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; cfg.ADC_Mode = ADC_Mode_Independent; cfg.ADC_NbrOfChannel = ADC1_USE_CHANNEL_NUM; cfg.ADC_ScanConvMode = ENABLE; ADC_Init(ADC1,&cfg);//初始化ADC //配置ADC通道 ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_13Cycles5); ADC_RegularChannelConfig(ADC1,ADC_Channel_1,2,ADC_SampleTime_13Cycles5); ADC_RegularChannelConfig(ADC1,ADC_Channel_2,3,ADC_SampleTime_13Cycles5); ADC_RegularChannelConfig(ADC1,ADC_Channel_3,4,ADC_SampleTime_13Cycles5); ADC_RegularChannelConfig(ADC1,ADC_Channel_4,5,ADC_SampleTime_13Cycles5); ADC_TempSensorVrefintCmd(ENABLE); ADC_DMACmd(ADC1,ENABLE);//使能ADC的DMA觸發(fā) ADC_ClearFlag(ADC1,ADC_FLAG_EOC); ADC_Cmd(ADC1,ENABLE);//使能ADC //ADC校準 ADC_ResetCalibration(ADC1); while(RESET != ADC_GetResetCalibrationStatus(ADC1)); cfprintf(\"adinit1,%08X\\\\n\",ADC1->CR2); ADC_StartCalibration(ADC1); while(RESET != ADC_GetCalibrationStatus(ADC1)); } void usr_adc_test(void) { ADC_Cmd(ADC1,ENABLE); while(0 == adc_dma_fns); cfprintf(\"ad_ch1:%u\\\\n\",ad_dma_data[0]); cfprintf(\"ad_ch2:%u\\\\n\",ad_dma_data[1]); cfprintf(\"ad_ch3:%u\\\\n\",ad_dma_data[2]); cfprintf(\"ad_ch4:%u\\\\n\",ad_dma_data[3]); cfprintf(\"ad_ch5:%u\\\\n\",ad_dma_data[4]); } void adc_dma_demo(void) { cfprintf(\"adc dma demo\\\\n\"); usr_adc_init(); while(1) { usr_adc_test(); cf_delay_ms(1000); } } void main(void) { #if defined(DEBUG_PRINTF_EN) debug_uart4_init(); cfprintf(\"SYS_FREQ = 0d%d; AHB_FREQ = 0d%d; \\\\n\", SYS_FREQ, AHB_FREQ); cfprintf(\"APB1_FREQ = 0d%d; APB2_FREQ = 0d%d;.\\\\n\", APB1_FREQ, APB2_FREQ); cfprintf(\"cal:%u\\\\r\\\\n\",cstatus); cfprintf(\"Start user program...\\\\r\\\\n\"); #endif adc_dma_demo(); } 經(jīng)編譯,其結果如圖2所示。 圖2 編譯結果 經(jīng)此探索,要對函數(shù) demo()中所提供的功能進行測試將不再是難題。 盡管通過編譯,可以得到所需的*.elf和*.hex文件,但在編譯過程中,想同時生成*.bin文件的要求一直沒有實現(xiàn)。 否則,就可以嘗試一下升級下載的效果了。
    發(fā)表于 07-19 12:48

    【M-K1HSE開發(fā)板免費體驗】DevEco Studio應用開發(fā)體驗(物理機器運行失敗)

    安裝IDEhttps://developer.huawei.com/consumer/cn/deveco-studio/下下載DevEco Studio需要先登錄 解壓下載的安裝包雙擊deveco-studio-5.1.1.823安裝如下位置全部勾選,其他按提示 即可 創(chuàng)建工程打開DevEco安裝目錄默認位于C:\\Program Files\\Huawei\\DevEco-Device-Tool 創(chuàng)建工程 選擇應用模板 這里默認即可 自動開始編譯,自動會安裝依賴。 安裝SDKFile->Settings指定SDK路徑安裝指定版本的SDK 運行OTG USB口接電腦,開發(fā)板上電,會看到開發(fā)板信息 點擊File > Project Structure> Project > SigningConfigs界面勾選“Support HarmonyOS”和“Automatically generate signature”,點擊界面提示的“Sign In”,使用華為帳號登錄。等待自動簽名完成后,點擊“OK”即可。 點擊以下圖標運行 提示以下錯誤 點擊右下角的Troubleshooting guidehttps://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-app-debugging-22-V5看到是IDE版本大于開發(fā)板固件 https://developer.huawei.com/consumer/cn/doc/harmonyos-releases/app-compatibility查看版本信息 Hdc目錄下C:\\Program Files\\Huawei\\DevEco Studio\\sdk\\default\\openharmony\\toolchains終端運行./hdc shell param get const.ohos.apiversion查看sdk版本為12 軟件更新界面也可以看到 修改工程級build-profile.json5配置的compatibleSdkVersion字段api版本兼容設備的api版本。 點擊File > Sync and Refresh Project,然后重新執(zhí)行Sync。 還提示error: delivery sign profile failed需要重新進行前面的認證過程。 還是以下報錯 ./hdc shell param set const.security.developermode.state true 還是不能解決,換到Deveco Studio 4.0版本https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_package_901_9/9a/v3/HBD3TfhiT_GFqeX44Qcwtg/devecostudio-windows-4.0.0.600.zip?HW-CC-KV=V1&HW-CC-Date=20231027T004333Z&HW-CC-Expire=315360000&HW-CC-Sign=279824A013505EFC063997614DC1B6AB1C3A2EE5AC48CEF15DDB3E1F79DA435A 還是一樣,搜索說是要手動認證,太麻煩了,算了棄療了,一個平臺開發(fā)環(huán)境的易用性決定了推廣性,開發(fā)不好用肯定是難以推廣的。
    發(fā)表于 07-19 11:16

    芯片引腳成型設備與芯片引腳整形設備的區(qū)別

    在電子制造領域,芯片引腳成型設備和芯片引腳整形設備是兩種重要的工具,它們在功能和應用場景上存在顯著區(qū)別。了解這些區(qū)別有助于企業(yè)選擇合適的設備,提高生產(chǎn)效率和產(chǎn)品質(zhì)量。 芯片引腳成型設備主要用于芯片引腳的初步成型,確保引腳的形狀和尺寸符合后續(xù)裝配和焊接的要求。這些設備通常具有高精度的模具和成型系統(tǒng),能夠?qū)⒁_彎曲成規(guī)定的形狀。例如,在芯片生產(chǎn)過程中,引腳成型是關鍵工序,直接影響到后續(xù)的貼裝和焊接質(zhì)量。成型設備可以精確控制引腳的長度和形狀,提高生產(chǎn)效率,降低產(chǎn)品報廢率。 芯片引腳整形設備則主要用于修復和調(diào)整已經(jīng)成型但可能在后續(xù)過程中發(fā)生變形的引腳。這些設備通常具備高精度的定位系統(tǒng)和整形工具,能夠?qū)σ_進行精細的調(diào)整。例如,上海桐爾科技推出的芯片引腳整形機,采用先進的機械設計和精密的控制技術,能夠?qū)Χ喾N封裝形式的芯片引腳進行精確整形。設備配備了高精度的模具和定位系統(tǒng),確保引腳在整形過程中能夠準確地達到設計要求。 在功能上,成型設備更注重引腳的初始成型,而整形設備則側(cè)重于引腳的修復和調(diào)整。成型設備通常用于生產(chǎn)流程的早期階段,確保引腳的形狀和尺寸符合設計要求。整形設備則更多地用于生產(chǎn)流程的后期,修復在運輸或裝配過程中可能發(fā)生的引腳變形。 在應用場景上,成型設備廣泛應用于芯片制造和封裝行業(yè),確保引腳能夠正確地插入插座或焊接在電路板上。整形設備則更多地應用于電子組裝和維修領域,提高組裝效率和產(chǎn)品質(zhì)量。 綜上所述,芯片引腳成型設備和芯片引腳整形設備在功能和應用場景上各有側(cè)重。企業(yè)應根據(jù)自身的生產(chǎn)需求和工藝流程,選擇合適的設備,以提高生產(chǎn)效率和產(chǎn)品質(zhì)量。上海鑒龍等企業(yè)提供的高精度設備,能夠滿足不同階段的生產(chǎn)需求,助力電子制造企業(yè)實現(xiàn)高效、高質(zhì)量的生產(chǎn)。
    發(fā)表于 07-19 11:07

    多屏電腦運行同花順股票軟件幾次閃退,什么原因?怎么處理?

    華碩多屏電腦運行同花順股票軟件幾次閃退,還經(jīng)常登錄不上提示故障, 軟件在其他電腦上也能正常運行,華碩電腦換了主機,還是存在這樣的問題。請教各位大致什么原因?怎么處理?
    發(fā)表于 07-19 10:33

    中微愛芯8-Bit Flash MCU代理供應

    AiP8F1016TSSOP20/SOP20/QFN24/SOP28/SOP32/QFN32 AiP8F1032TSSOP20/SOP20/QFN24/SOP28/SOP32/QFN32 AiP8F0020SOP16/SOP20/SSOP20-0.635/QFN20 AiP8F0021SSOP28/SOP28/SSOP20/SOP20/SOP16 AiP8F1208TSSOP20/SOP20/SOP16 AiP8F1116TSSOP20/SOP20/SOP16/SOP14 AiP8F2032SOP28/SOP32/QFP44/SSOP48/LQFP48 AiP8F2116LQFP48 AiP8F3264LQFP44/LQFP48/SOP28 AiP8F3216SSOP20/SOP16/SOP20/SOP28/SSOP28 AiP8F3216ESSOP20/SOP16/SOP20/SOP28/SSOP28 AiP8F3208SOP16/SSOP20/SOP20 AiP8F3208E*SOP14/SOP16/TSSOP20/SOP20 AiP8F3512SOP16/SOP20/SOP28 AiP8F3516SOP28/SOP20/SOP16 AiP8F3515SOP28/SOP20/SOP16 AiP8F3532SOP28/SOP32 AiP8F3508QFN20/QFN28SOP28/SOP20/SOP16 AiP8F3564LQFP64/LQFP48/LQFP44 ………………………………………………………………………………… 中微愛芯原廠代理,支持終端工廠,為客戶提供樣品以及相關技術咨詢 如需更多系列型號,歡迎聯(lián)系咨詢。 深圳市芯天電子有限公司馬先生:15377714475
    發(fā)表于 07-19 09:58