請問有沒有FREERTOS+定時器中斷的例子啊

目前兩個單獨運行,都沒問題。 但是放在一起,定時器中斷要么不進(jìn)去,要么進(jìn)去幾次就跑飛了。

????????我目前在FREERTOS的項目上加的定時器中斷,后來把OS停了,包括H文件也注釋的。 只保留了TIM3中斷,依舊不進(jìn)入,現(xiàn)在搞不清哪里的問題了。(TIME.H,TIME.C也是從定時器中斷項目中復(fù)制過來的,一個字沒改。 懷疑是RTOS的項目,是不是配置了啥引起定時器中斷不工作了)。



特殊聲明也做了

void TIM3_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

CPU是CH32V103C8T6


RTOS里面兩個任務(wù),一個閃燈,一個ST7735屏幕顯示。? 定時器加進(jìn)去以后,定時器一會就不進(jìn)入了。? RTOS部分,閃燈有時候還在跑。 但是屏幕是從來沒顯示過的, 不加中斷,屏幕、閃燈都正常。


全套代碼在樓下,就簡單幾行代碼,屏蔽了OS。 只開啟中斷,但是中斷不工作,直接在FREERTOS的工程基礎(chǔ)上修改的。 麻煩幫忙看下到底啥情況啊。


TIME.C

#include?"Time.h"

void?TIM3_Int_Init(u16?arr,u16?psc)
{
????TIM_TimeBaseInitTypeDef??TIM_TimeBaseStructure;
????NVIC_InitTypeDef?NVIC_InitStructure;
????RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,?ENABLE);?//使能TIM3時鐘

????TIM_TimeBaseStructure.TIM_Period?=?199;???//指定下次更新事件時要加載到活動自動重新加載寄存器中的周期值。
????TIM_TimeBaseStructure.TIM_Prescaler=7199;?//指定用于劃分TIM時鐘的預(yù)分頻器值。
????TIM_TimeBaseStructure.TIM_ClockDivision?=?TIM_CKD_DIV1;?????//時鐘分頻因子
????TIM_TimeBaseStructure.TIM_CounterMode?=?TIM_CounterMode_Up;?//TIM計數(shù)模式,向上計數(shù)模式
????TIM_TimeBaseInit(TIM3,?&TIM_TimeBaseStructure);?//根據(jù)指定的參數(shù)初始化TIMx的時間基數(shù)單位
????TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE?);?//使能TIM3中斷,允許更新中斷

????//初始化TIM?NVIC,設(shè)置中斷優(yōu)先級分組
????NVIC_InitStructure.NVIC_IRQChannel?=?TIM3_IRQn;???????????//TIM3中斷
????NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority?=?0;?//設(shè)置搶占優(yōu)先級0
????NVIC_InitStructure.NVIC_IRQChannelSubPriority?=?3;????????//設(shè)置響應(yīng)優(yōu)先級3
????NVIC_InitStructure.NVIC_IRQChannelCmd?=?ENABLE;???????????//使能通道1中斷
????NVIC_Init(&NVIC_InitStructure);?//初始化NVIC

????TIM_Cmd(TIM3,?ENABLE);?//TIM3使能
}

void?TIM3_IRQHandler(void)
{
????static?u8?i=0;
????if(TIM_GetITStatus(TIM3,?TIM_IT_Update)?!=?RESET)?//檢查TIM3中斷是否發(fā)生。
????{
????????TIM_ClearITPendingBit(TIM3,TIM_IT_Update);????//清除TIM3的中斷掛起位。
????????printf("Enter?interrupt\n");
????????GPIO_WriteBit(GPIOA,?GPIO_Pin_0,?(i==0)???(i=Bit_SET):(i=Bit_RESET));
?????}
}


Time.h

#include?"ch32v10x_conf.h"

void?TIM3_Int_Init(u16?arr,u16?psc);
void?TIM3_IRQHandler(void)?__attribute__((interrupt("WCH-Interrupt-fast")));


Main.c

/**********************************?(C)?COPYRIGHT?*******************************
?*?File?Name??????????:?main.c
?*?Author?????????????:?WCH
?*?Version????????????:?V1.0.0
?*?Date???????????????:?2020/04/30
?*?Description????????:?Main?program?body.
?*?Copyright?(c)?2021?Nanjing?Qinheng?Microelectronics?Co.,?Ltd.
?*?SPDX-License-Identifier:?Apache-2.0
?*******************************************************************************/

/*
?*@Note
?task1?and?task2?alternate?printing
*/

#include?"debug.h"
//#include?"pwm.h"
//#include?"calibration.h"
//#include?"control.h"
//#include?"adc.h"
#include?"Time.h"
//#include?"freeRTOS_task.h"

static?void?SetSystemCLK_Config(void)
{
????RCC_DeInit();
????//RCC->CR?&=?~((uint32_t)RCC_CR_HSEON);???//新加,關(guān)閉外部時鐘。釋放PF0,PF1
????RCC_HSICmd(ENABLE);
????while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)?==?RESET);

????//RCC_HSEConfig(RCC_HSE_ON);
????//while(RCC_GetFlagStatus(RCC_FLAG_HSERDY)?==?RESET);

????//FLASH->ACR?=?FLASH_ACR_PRFTBE?|?FLASH_ACR_LATENCY;
????FLASH->ACTLR?=?FLASH_ACTLR_PRFTBE?|?FLASH_ACTLR_LATENCY;

????RCC_HCLKConfig(RCC_SYSCLK_Div1);
????RCC_PCLK2Config(RCC_HCLK_Div1);

????//RCC_PLLConfig(RCC_PLLSource_HSE,?RCC_PLLMul_6);
????RCC_PLLConfig(RCC_PLLSource_HSI_Div2,?RCC_PLLMul_12);???????//PLL為鎖相環(huán)倍頻輸出,其時鐘輸入源可選擇為HSI/2、HSE或者HSE/2
????//RCC_PLLConfig(RCC_PLLSource_HSI,?RCC_PLLMul_6);
????RCC_PLLCmd(ENABLE);
????while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)?==?RESET);

????RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

????/*if(SysTick_Config(48000000u?/?1000))
????{
????????while(1)?{;}
????}
????*/
?????/*?Wait?till?PLL?is?used?as?system?clock?source?*/
????//while?((RCC->CFGR?&?(uint32_t)RCC_CFGR_SWS)?!=?(uint32_t)RCC_CFGR_SWS_PLL)
????while?((RCC->CFGR0?&?(uint32_t)RCC_SWS)?!=?(uint32_t)RCC_SWS_PLL)
????{
????}

????//NVIC_SetPriority(SysTick_IRQn,?0);
????NVIC_SetPriority(SysTicK_IRQn,?0);
}


/*******************************************************************************
*?Function?Name??:?main
*?Description????:?Main?program.
*?Input??????????:?None
*?Return?????????:?None
*******************************************************************************/
int?main(void)
{
????//SetSystemCLK_Config();
????NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
????Delay_Init();
????USART_Printf_Init(115200);
????printf("SystemClk:%d\r\n",SystemCoreClock);

????//PWM_Config();
????//Read_ConfigData();
????//PID_Config();

????//ADC_Config();

????GPIO_InitTypeDef?GPIO_InitStructure?=?{0};
????RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,?ENABLE);
????GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_0;
????GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_Out_PP;
????GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;
????GPIO_Init(GPIOA,?&GPIO_InitStructure);
????TIM3_Int_Init(49,?719);?????????//100us一次??開了要掛
????//FreeRTOS_Task_Config();

????while(1)
????{
????????Delay_Ms(100);
????}
}



你將你中斷聲明的方式按照下圖方式修改一下試試呢

image.png


改了,還是一樣的。 就這幾行代碼,奇了怪了,跟另外一個項目沒區(qū)別啊。 但是中斷就不觸發(fā),邪門了。


更新下:目前把項目的FREERTOS目錄,加freertosconfig.h刪除,再把項目中的這兩個加上。 定時器工作正常了,原因未知。

??????PARENT-2-PROJECT_LOC/SRC/Ld
????
????
??????Startup
??????2
??????PARENT-2-PROJECT_LOC/SRC/Startup
????
??



不過還沒玩,改成這樣以后。 我再把FreeRTOS目錄,F(xiàn)reeRTOSconfig.h文件拷回去。鏈接的時候不通過了,提示__freertos_irq_stack_top找不到。? 但是Link.ld里面又有。


我后來又改了.cproject中的useByScannerDiscovery="true" (原來是False),現(xiàn)在又報

../FreeRTOS/portable/GCC/RISC-V/portASM.S:?Assembler?messages:
../FreeRTOS/portable/GCC/RISC-V/portASM.S:116:?Error:?illegal?operands?`addi?sp,sp,-portCONTEXT_SIZE'
../FreeRTOS/portable/GCC/RISC-V/portASM.S:117:?Error:?unrecognized?opcode?`store_x?x1,1*portWORD_SIZE(sp)'


我去,不讓人活啊。。 目錄弄出去,再弄進(jìn)來,這么大陣仗?


您好,你可以將你的工程發(fā)送至我的郵箱(lzs@wch.cn)幫你看一下,或我這邊到時候給你提供一個例程。


我的也是出現(xiàn)寄存器宏定義的地方有錯,請問您是怎么解決的

image.png


您好,可按照下圖配置,在工程屬性頁勾選匯編預(yù)處理選項試一下

image.png


我也有相同的問題:在中斷中增加一個斷點,仿真好像沒有問題。沒有斷電就跑到硬件錯誤中去了。


進(jìn)定時器之前,系統(tǒng)是正常的。


您好,若有用到定時器中斷,可以注意一下中斷函數(shù)是否加了中斷聲明,關(guān)于中斷聲明,可以參考一下4樓回復(fù)。此外需要注意仿真的時候不要有操作FLASH、開啟看門狗或低功耗模式的操作


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频