寫在前面單片機(jī)中有看門狗,長(zhǎng)時(shí)間不喂狗,程序就會(huì)復(fù)位。為什么長(zhǎng)時(shí)間不喂狗呢?是因?yàn)槌绦蚺茱w了,拋開外部因素不談,今天和大家分享一下單片機(jī)程序跑飛的幾個(gè)原因。在編寫單片機(jī)程序的時(shí)候,由于中斷服務(wù)程序?qū)懙牟缓?,?dǎo)致單片機(jī)程序總是跑飛,最后費(fèi)了好長(zhǎng)時(shí)間,花了很大功夫才找到問題原因,由此...
▼點(diǎn)擊下方名片,關(guān)注公眾號(hào)▼在編寫單片機(jī)程序的時(shí)候,由于中斷服務(wù)程序?qū)懙牟缓茫瑢?dǎo)致單片機(jī)程序總是跑飛,最后費(fèi)了好長(zhǎng)時(shí)間,花了很大功夫才找到問題原因,由此總結(jié)了單片機(jī)程序跑飛的三種現(xiàn)象、原因及解決方法。01、數(shù)組越界/溢出現(xiàn)象單片機(jī)程序在函數(shù)中運(yùn)行時(shí),總是在運(yùn)行到函數(shù)末尾,要跳出函...
寫在前面單片機(jī)中有看門狗,長(zhǎng)時(shí)間不喂狗,程序就會(huì)復(fù)位。為什么長(zhǎng)時(shí)間不喂狗呢?是因?yàn)槌绦蚺茱w了,拋開外部因素不談,今天和大家分享一下單片機(jī)程序跑飛的幾個(gè)原因。在編寫單片機(jī)程序的時(shí)候,由于中斷服務(wù)程序?qū)懙牟缓?,?dǎo)致單片機(jī)程序總是跑飛,最后費(fèi)了好長(zhǎng)時(shí)間,花了很大功夫才找到問題原因,由此...
對(duì)程序進(jìn)行優(yōu)化,通常是指優(yōu)化程序代碼或程序執(zhí)行速度。優(yōu)化代碼和優(yōu)化速度實(shí)際上是一個(gè)予盾的統(tǒng)一。一般是優(yōu)化了代碼的尺寸,就會(huì)帶來執(zhí)行時(shí)間的增加;如果優(yōu)化了程序的執(zhí)行速度,通常會(huì)帶來代碼增加的副作用。很難魚與熊掌兼得,只能在設(shè)計(jì)時(shí)掌握一個(gè)平衡點(diǎn)
之前一直很奇怪一個(gè)問題,每次寫好單片機(jī)程序之后,用燒錄軟件進(jìn)行燒錄時(shí),能看到燒錄文件也就是hex的文件大?。?我用的單片機(jī)芯片是STM32F103C8T6,程序儲(chǔ)存器(flash)只有64K。 從上圖可以看出,hex有128K。 我有兩點(diǎn)疑問, 1. 只是一個(gè)很簡(jiǎn)單的平衡小車程
環(huán)境描述:Keil+ Proteus電路仿真首先在Keil里創(chuàng)建一個(gè)工程,在工程里建立三個(gè)文件,文件名分別是:“頭文件.c”,“delay.c”,“delay.h”分別在 頭文件.c、delay.c、delay.h寫入相應(yīng)內(nèi)容:(注意不要將 delay.h文
1)對(duì)于燒錄在單片機(jī)里面的程序,程序的代碼段,data段,bss段,rodata段等都存放在單片機(jī)的Flash中。當(dāng)單片機(jī)上電后,初始化匯編代碼將data段,bss段,復(fù)制到單片機(jī)的RAM中,并建立好堆棧,開始調(diào)用程序的main函數(shù)。
最近在調(diào)試單片機(jī)程序,總是遇到一些開始認(rèn)為不可思議的事情,后來解決了問題后發(fā)現(xiàn),都是因?yàn)樽约簳鴮懗绦虿粐?yán)謹(jǐn),其主要原因是沒有注意c語言的數(shù)據(jù)類型的數(shù)據(jù)范圍。對(duì)有符號(hào)、無符號(hào)數(shù)據(jù)的使用存在誤區(qū),對(duì)類型轉(zhuǎn)換
單片機(jī)我們都用過,我們知道單片機(jī)的FLASH有4K的,有8K的,單片機(jī)程序我們也寫過,但是我們寫好的程序有多大,你知道嗎?程序?qū)懞貌⒕幾g后生成hex文件,這個(gè)hex文件就是要下載到單片機(jī)里的文件,這個(gè)文件的大小不能超
測(cè)試,相信對(duì)每一個(gè)搞程序的都不會(huì)生疏,然后我們會(huì)聯(lián)想到什么單元測(cè)試,集成測(cè)試,發(fā)布測(cè)試,黑盒測(cè)試,白盒測(cè)試等等一系列的名詞。但在單片機(jī)領(lǐng)域,更多的功能測(cè)試。測(cè)試人員,在試用產(chǎn)品后,發(fā)現(xiàn)bug然后報(bào)告給研發(fā)
單片機(jī)中一個(gè)程序的運(yùn)行過程分為取指令,分析指令和執(zhí)行指令幾個(gè)步驟。取指令的任務(wù)是:根據(jù)程序計(jì)數(shù)器PC中的值從程序存儲(chǔ)器讀出現(xiàn)行指令,送到指令寄存器。分析指令階段的任務(wù)是:將指令寄存器中的指令操作碼取出后
單片機(jī)程序死機(jī),跑飛了可以從以下幾個(gè)方面查找原因:1. 意外中斷。是否打開了某個(gè)中斷,但是沒有響應(yīng)和清除中端標(biāo)志,導(dǎo)致程序一直進(jìn)入中斷,造成死機(jī)假象;2. 中斷變量處理不妥。若定義某些會(huì)在中斷中修改的全局變
單片機(jī)程序死機(jī),跑飛了可以從以下幾個(gè)方面查找原因:1. 意外中斷。是否打開了某個(gè)中斷,但是沒有響應(yīng)和清除中端標(biāo)志,導(dǎo)致程序一直進(jìn)入中斷,造成死機(jī)假象;2. 中斷變量處理不妥。若定義某些會(huì)在中斷中修改的全局變量
從業(yè)十年,教你單片機(jī)入門 第23講:不管是以前講的加法,現(xiàn)在講的減法,還是未來講的乘法和除法,我都會(huì)強(qiáng)烈建議“請(qǐng)把所有參與運(yùn)算的變量都轉(zhuǎn)成unsigned long類型”。unsigned long變量是三種數(shù)據(jù)類型中
分層的思想,并不是什么神秘的東西,事實(shí)上很多做項(xiàng)目的工程師本身自己也會(huì)在用??戳瞬簧偬佣及l(fā)現(xiàn)沒有提及這個(gè)東西,然而分層結(jié)構(gòu)確是很有用的東西,參透后會(huì)有一種恍然大悟的感覺。如果說我不懂LCD
STC單片機(jī)具有通過串口編程功能,簡(jiǎn)單到通過串口3三根線就能將程序燒錄到單片機(jī)內(nèi),這大大的方便了開發(fā)人員,省去了昂貴復(fù)雜的編程器,在調(diào)試程序時(shí)也可將內(nèi)部數(shù)據(jù)直接通過串口發(fā)送到PC上觀看,一些不太復(fù)雜的程序甚
失敗現(xiàn)象:Chinese:正在嘗試與 MCU/單片機(jī) 握手連接 ...打開串口失敗!Chinese: 串口已被其它程序打開或該串口不存在。解決方法:1,檢查USB下載模塊的連接是否正常,模塊上的綠色和紅色LED燈都亮起表示連接正常。綠色
程序存儲(chǔ)器ROM的規(guī)劃原則是:(1)按照MCS-5單片機(jī)復(fù)位及中斷入口地址的規(guī)定,002FH以前的空間都作為中斷、復(fù)位的入口地址區(qū)設(shè)計(jì)時(shí),可在這些地址單元中設(shè)置轉(zhuǎn)移指令,轉(zhuǎn)移到相應(yīng)的中斷服務(wù)程序或復(fù)位啟動(dòng)程序。(2)當(dāng)程
擴(kuò)展程序存儲(chǔ)器常用的芯片是EPROM(Erasable Programmable Read Only Memory)型(紫外線可擦除型), 如2716(2K×8)、2732(4K×8)、2764(8K×8)、27128(16K×8)、27256(32K×8)、27512(64K&ti
擴(kuò)展程序存儲(chǔ)器常用的芯片是EPROM(Erasable Programmable Read Only Memory)型(紫外線可擦除型), 如2716(2K×8)、2732(4K×8)、2764(8K×8)、27128(16K×8)、27256(32K×8)、27512(64K&ti