我用C語言進行模運算有問題。 我已經定義了全局變量uint16_t Tmr_1ms,它是每1毫秒遞增 。我想用這個變量 這是考慮功能用C語言進行模運算
void OSC(uint32_t output, Osc_t *p){
float act_time;
if(p->start){
taskENTER_CRITICAL();
act_time = Tmr_1ms;
taskEXIT_CRITICAL();
if(p->init){
SetLogicSignal(output);
p->start_time = act_time;
p->delta = ((p->period)/(2*p->T));
p->init = FALSE;
}
if(((uint16_t)act_time - (uint16_t)(p->start_time)) >= ((uint16_t)(p->delta))){
NegLogicSignal(output); // my defined function for negation of a bit variable
p->start_time = act_time;
}
}else{
ClearLogicSignal(output);
p->init = TRUE;
}
}
振盪器狀態被存儲在如下結構
// oscillator state (oscillator with fixed duty cycle)
typedef struct{
float period; // period of the oscillations (ms)
float T; // function execution period (ms)
BOOL start; // oscillator start signal (start==TRUE, stop==FALSE)
BOOL init; // initiate the oscillator state
float delta; // time after which expiration the oscillator output is negated
float start_time; // captured Tmr_1ms value
}Osc_t;
下面的實例實現以下 軟件振盪器實現代碼
// oscillator instance init
Test_Oscillator_state.T = 20;
Test_Oscillator_state.period = 1000;
Test_Oscillator_state.init = TRUE;
// calling the function
Test_Oscillator_state.start = TRUE;
OSC(LTestBlink, &Test_Oscillator_state);
的問題是在下面的代碼
if(((uint16_t)act_time - (uint16_t)(p->start_time)) >= ((uint16_t)(p->delta))){
NegLogicSignal(output);
p->start_time = act_time;
}
輸出否定僅在Tmr_1ms溢出之前起作用。我不明白爲什麼。請有人給我任何指導?提前致謝。
提供一個[mcve]並按[ask [。 「funcional」是什麼意思?沒有否定運算符,並且'NegLogicSignal'不是標準函數。學習使用調試器。 – Olaf
您的代碼中沒有任何模運算符,因此不確定哪些模運算有問題? –
我根本不知道你的問題是什麼。你的意思是說,一旦Tmr_1ms環繞着你,再也不會進入調用「NegLogicSignal(output)」的「if」語句了嗎? – Basya