1.使用兩個定時器
2.定時器A發PWM,另外一個定時器B周期是1ms;
3.定時器A的中斷里面做標志的判斷,當前是加速還是減速,或者是勻速,標志位傳遞到定時器B中斷里,定時器B中斷里面進行頻率數值的加減,同時在一個其他的主回圈函式里面進行定時器ARR的賦值(可以保證“實時”的改變頻率值);
4.那么問題來了,這樣做,兩個中斷之間的資料傳遞會有問題嗎?比如標志位會改變等等,坐等大神回復。
uj5u.com熱心網友回復:
簡單就用一個全域變數uj5u.com熱心網友回復:
哥們,你說的好輕松啊。。。
uj5u.com熱心網友回復:
我做過啊 開啟兩個定時器,在中斷處理函式中分別設定gpio 的輸出0和1。主函式中計算頻率然后修改定時器的定時時間。真不難
uj5u.com熱心網友回復:
簡單就用一個全域變數
哥們,你說的好輕松啊。。。
我做過啊 開啟兩個定時器,在中斷處理函式中分別設定gpio 的輸出0和1。主函式中計算頻率然后修改定時器的定時時間。真不難
你做的是翻轉。。。
我說的是定時器的PWM功能,還要做加減速
如果說的不是一回事就別回復了。。。謝謝大神
uj5u.com熱心網友回復:
你是不是要做變頻的PWM,B定時器做變頻,A做PWM?全域變數,注意帶關鍵字volatile,然后,如果讀寫的話,看看要不要加臨界區的加解鎖,可以的話,盡量不要用。
uj5u.com熱心網友回復:
你是不是要做變頻的PWM,B定時器做變頻,A做PWM?
全域變數,注意帶關鍵字volatile,然后,如果讀寫的話,看看要不要加臨界區的加解鎖,可以的話,盡量不要用。
為什么要加volatile關鍵字呢,和不用有什么區別嗎,能麻煩解釋一下嗎
uj5u.com熱心網友回復:
你是不是要做變頻的PWM,B定時器做變頻,A做PWM?
全域變數,注意帶關鍵字volatile,然后,如果讀寫的話,看看要不要加臨界區的加解鎖,可以的話,盡量不要用。
為什么要加volatile關鍵字呢,和不用有什么區別嗎,能麻煩解釋一下嗎
給你個總結,全域變數,在多執行緒或者類似于“多執行緒”的中讀寫訪問,都應該加這個關鍵字,否者,出現讀“臟資料”的現象。
多執行緒自不必多說,單片機上的作業系統,你用過就該知道多執行緒的情況。
但如果不上任何作業系統,中斷和中斷,中斷和main也可以理解成“多執行緒”的性質。
為什么要加voaltile,這是單片機嵌入式工程師必須要清楚的,不然經常栽更頭還不知道是什么原因。
不加volatile,編譯器會把全域變數優化到暫存器中,有時甚至優化到cache中,不同的執行緒在訪問這個全域變數時,有的執行緒讀取的是這個全域變數的原始地址,有的執行緒訪問的是這個執行緒在優化后的暫存器或cache,如果執行緒交錯訪問,就可能出現讀到臟資料的現象,導致程式漸入錯誤的流程。
uj5u.com熱心網友回復:
你是不是要做變頻的PWM,B定時器做變頻,A做PWM?
全域變數,注意帶關鍵字volatile,然后,如果讀寫的話,看看要不要加臨界區的加解鎖,可以的話,盡量不要用。
為什么要加volatile關鍵字呢,和不用有什么區別嗎,能麻煩解釋一下嗎
給你個總結,全域變數,在多執行緒或者類似于“多執行緒”的中讀寫訪問,都應該加這個關鍵字,否者,出現讀“臟資料”的現象。
多執行緒自不必多說,單片機上的作業系統,你用過就該知道多執行緒的情況。
但如果不上任何作業系統,中斷和中斷,中斷和main也可以理解成“多執行緒”的性質。
為什么要加voaltile,這是單片機嵌入式工程師必須要清楚的,不然經常栽更頭還不知道是什么原因。
不加volatile,編譯器會把全域變數優化到暫存器中,有時甚至優化到cache中,不同的執行緒在訪問這個全域變數時,有的執行緒讀取的是這個全域變數的原始地址,有的執行緒訪問的是這個執行緒在優化后的暫存器或cache,如果執行緒交錯訪問,就可能出現讀到臟資料的現象,導致程式漸入錯誤的流程。
多謝,明白了
uj5u.com熱心網友回復:
你是不是要做變頻的PWM,B定時器做變頻,A做PWM?
全域變數,注意帶關鍵字volatile,然后,如果讀寫的話,看看要不要加臨界區的加解鎖,可以的話,盡量不要用。
為什么要加volatile關鍵字呢,和不用有什么區別嗎,能麻煩解釋一下嗎
給你個總結,全域變數,在多執行緒或者類似于“多執行緒”的中讀寫訪問,都應該加這個關鍵字,否者,出現讀“臟資料”的現象。
多執行緒自不必多說,單片機上的作業系統,你用過就該知道多執行緒的情況。
但如果不上任何作業系統,中斷和中斷,中斷和main也可以理解成“多執行緒”的性質。
為什么要加voaltile,這是單片機嵌入式工程師必須要清楚的,不然經常栽更頭還不知道是什么原因。
不加volatile,編譯器會把全域變數優化到暫存器中,有時甚至優化到cache中,不同的執行緒在訪問這個全域變數時,有的執行緒讀取的是這個全域變數的原始地址,有的執行緒訪問的是這個執行緒在優化后的暫存器或cache,如果執行緒交錯訪問,就可能出現讀到臟資料的現象,導致程式漸入錯誤的流程。
總結的很好啊。我想說我一般會用register關鍵字。
uj5u.com熱心網友回復:
你是不是要做變頻的PWM,B定時器做變頻,A做PWM?
全域變數,注意帶關鍵字volatile,然后,如果讀寫的話,看看要不要加臨界區的加解鎖,可以的話,盡量不要用。
為什么要加volatile關鍵字呢,和不用有什么區別嗎,能麻煩解釋一下嗎
給你個總結,全域變數,在多執行緒或者類似于“多執行緒”的中讀寫訪問,都應該加這個關鍵字,否者,出現讀“臟資料”的現象。
多執行緒自不必多說,單片機上的作業系統,你用過就該知道多執行緒的情況。
但如果不上任何作業系統,中斷和中斷,中斷和main也可以理解成“多執行緒”的性質。
為什么要加voaltile,這是單片機嵌入式工程師必須要清楚的,不然經常栽更頭還不知道是什么原因。
不加volatile,編譯器會把全域變數優化到暫存器中,有時甚至優化到cache中,不同的執行緒在訪問這個全域變數時,有的執行緒讀取的是這個全域變數的原始地址,有的執行緒訪問的是這個執行緒在優化后的暫存器或cache,如果執行緒交錯訪問,就可能出現讀到臟資料的現象,導致程式漸入錯誤的流程。
總結的很好啊。我想說我一般會用register關鍵字。
這是為什么呢,嚎
uj5u.com熱心網友回復:

是這樣的嗎
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/44002.html
標籤:單片機/工控
上一篇:Android開發基礎————通過內部類實作按鈕點擊事件
下一篇:基于影像識別的自動樂譜演奏系統
