本帖最后由 王锦平 于 2024-9-8 14:48 编辑
请问,这两句
- sStartTask_TimQry(OS_TMID_TASKMGR);
- uStartTask(Starter, OS_STATUS_READY); // 启动任务
复制代码
是不是即便没有启动OS,也是会返回的。现在我自己找问题的时候貌似是OS没有正常嘀嗒,Taskmgr 也没有正常运行。
我也查看了 mSys_INIT 和 init_hook() ,确实已经对定时器0进行了配置与开启了中断
- void init_hook(void)
- {
- #define BAUD 115200 // 串口波特率
- #define TM2 (65536 - SYSCFG_SYSCLK / 4 / BAUD)
- P0M0 = 0; P0M1 = 0;
- P1M0 = 0; P1M1 = 0;
- P2M0 = 0; P2M1 = 0;
- P3M0 = 0; P3M1 = 0;
- P4M0 = 0; P4M1 = 0;
- P5M0 = 0; P5M1 = 0;
- #if TARGET_8H
- P6M0 = 0; P6M1 = 0;
- P7M0 = 0; P7M1 = 0;
- #endif
-
- AUXR = 0x00; // 允许访问内部xdata
- #if TARGET_8H
- P_SW2 = EAXFR; // 允许访问扩展RAM区特殊功能寄存器
- #else
- BIT_SET_ONE(P_SW2, 7);// 允许访问扩展RAM区特殊功能寄存器
- #endif
-
- TMOD = 0x00; // 定时器0、1、2、3、4为16位自动重装载模式
- AUXR = 0x45; // 定时器1、2为1T模式, 串口1用定时器2做波特率发生器
- SCON = 0x40; // 串口1工作模式为模式1
- S2CON = 0x40; // 串口2工作模式为模式0,串口2用定时器2做波特率发生器
- #if TARGET_8H
- P_SW1 = 0xC0; // 串口1切换至P4.3/P4.4
- #else
- P_SW1 = 0x08; // 串口1切换至P3.0/P3.1
- #endif
- TI = 1; // 用于printf
- /* 定时器2 */
- T2L = (unsigned char)TM2;
- T2H = (unsigned char)(TM2 >> 8);
- #if TARGET_8H
- AUXR|= T2R;
- #else
- BIT_SET_ONE(AUXR, 4);
- #endif
-
- /* UART2中断优先级为1级 */
- #if TARGET_8H
- IP2H &=~PS2H;
- IP2 |= PS2;
- #else
- BIT_SET_ZERO(IP2H, 0);
- BIT_SET_ONE(IP2, 0);
- #endif
-
- /* INT0中断优先级为0级 */
- #if TARGET_8H
- IPH &=~PX0H;
- PX0 = 0;
- #else
- BIT_SET_ZERO(IPH, 0);
- BIT_SET_ZERO(IP, 0);
- #endif
-
- /* 任务管理器 */
- #if SYSCFG_DEBUGGING == 1
- #if TARGET_8H
- S2CON |= S2REN;
- IE2 |= ES2;
- #else
- BIT_SET_ONE(S2CON, 4);// 允许串口2接收中断
- BIT_SET_ONE(IE2, 0);// 允许串口2中断
- #endif
- #endif
-
- GPIO_setOpenDrainOutput(3, 3);// P0
- GPIO_setPushPullupOutput(0, 0);
- }
复制代码
- #define mSys_INIT \
- do{ \
- s_init_mempool((void _MALLOC_MEM_ *)MCUCFG_MALLOCMEMBPTR, MCUCFG_MALLOCMEMSIZE); \
- OS_NOPx1; \
- AUXR = mSysTick_CLKMOD == 1 ? AUXR | 0x80 : AUXR &~0x80; \
- TMOD &= 0xF0; \
- TL0 = (s_u8_t)(mSysTick_InitValue); \
- TH0 = (s_u8_t)(mSysTick_InitValue >> 8); \
- TR0 = 1; \
- mSysIRQ_Enable; \
- EA = 1; \
- }while(false)
复制代码
在进入 Sysidle 不知道后面跑哪去了
此处操作IO和打印是没有效果的
- uCreateTask(Sysidle, 0, MCUCFG_STACKSIZE_SYSIDLE, 0, 0)
- {
- P33 = 1;
- P00 = 0;
- printf("----0----");
- #if SYSCFG_SAFERUNTIME == __ENABLED__
- if(true){
- s_tid_t i;
- for(i = 1; i < OS_TASKTOTAL + 1; i++){
- s_sign_timeout[i] = 0;
- }
- }
- #endif
- #if SYSCFG_SOFTRTC == __ENABLED__
- if(true){
- static s_u8_t year = 0xFF;
- if(year != s_rtc[0][0]){
- year = s_rtc[0][0];
- s_month2day = year ? ((year & 3) ? 28 : 29) : ((sDefCentury & 3) ? 28 : 29);
- }
- }
- #endif
- #if SYSCFG_IDLEHOOK == __ENABLED__
- idle_hook();
- #endif
- #if SYSCFG_LOWPOWERMODE == __ENABLED__
- mSys_Idle;
- #endif
- OS_NOPx2;
- uEndTasking;
- }
复制代码
还请楼主为我解惑
|