向CosyOS成功迈出的第一步: 通过串口库助手观察任务管理器输出:
首先从作者的gitee仓库拉取最新的没有测试case的纯净版本,防止其他因素影响;
然后按照作者文档中心 -> 开发流程 创建keil 工程(为了使用CosyOS 给mac电脑装了个win系统 {:5_318:});
接下来添加需要的代码:
1、在初始化钩子中添加初始化代码:
- /**************************************************************************//**
- * @item CosyOS-II Hook
- * @file init_hook.c
- * @brief 初始化钩子
- * @detail 在主函数中首先被调用,适用于初始化时钟、GPIO、寄存器等工作。
- * @author 迟凯峰
- * @version V3.0.0
- * @date 2024.06.25
- ******************************************************************************/
-
- #include "..\System\os_link.h"
-
- 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;
- P6M0 = 0; P6M1 = 0;
- P7M0 = 0; P7M1 = 0;
-
- AUXR = 0x00; // 允许访问内部xdata
- P_SW2 = EAXFR | 0x01; // xxxx xxxx = 1000 0000 允许访问扩展RAM区特殊功能寄存器, 我是用的是STCH试验箱,因此这里需要切换串口二的引脚;
-
- 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做波特率发生器
- P_SW1 = 0xC0; // 串口1切换至P4.3/P4.4
- TI = 1; // 用于printf
- /* 定时器2 */
- T2L = (unsigned char)TM2;
- T2H = (unsigned char)(TM2 >> 8);
- AUXR|= T2R;
- /* UART2中断优先级为1级 */
- IP2H &=~PS2H;
- IP2 |= PS2;
- /* INT0中断优先级为0级 */
- IPH &=~PX0H;
- PX0 = 0;
- /* 任务管理器 */
- #if SYSCFG_DEBUGGING == 1
- S2CON |= S2REN;
- IE2 |= ES2;
- #endif
- }
复制代码
2、在用户分组下新建.C 文件编写串口处理程序(直接copy 作者的)
- /**************************************************************************//**
- * @item CosyOS-II User
- * @file Taskmgr.c
- * @brief CosyOS-II 任务管理器
- * @detail 当前配置为使用UART2,用户可自行调整。
- 正常情况下,下方代码中,您仅需调整:UART2_Isr、中断向量号、S2CON、S2TI、S2RI、S2BUF。
- 您需自行初始化串口、串口中断优先级、波特率等相关配置。
- * @author 迟凯峰
- * @version V1.0.2
- * @date 2024.05.11
- ******************************************************************************/
-
- #include "..\System\os_link.h"
- #if SYSCFG_DEBUGGING == __ENABLED__
-
- void UART2_Isr(void) interrupt 8// using 3
- {
- if(S2CON & S2TI){
- S2CON &= ~S2TI;
- if(*s_debug_sendptr){
- S2BUF = *s_debug_sendptr++;
- }
- else{
- iDebugSend;
- }
- }
- if(S2CON & S2RI){
- S2CON &= ~S2RI;
- if(s_debug_recvptr - s_debug_recvbuff < OS_DEBUGRECVBUFFSIZE - 1){
- *s_debug_recvptr++ = S2BUF;
- }
- iDebugRecv;
- }
- }
-
- #endif
复制代码 由于使用了串口二,需要使用LINK1D的另一组串口,接线如下:
效果如下:
|