找回密码
 立即注册
楼主: 380091044

UCOSII中使用OSTimeDly (INT32U ticks)延时,不进行任务切换?

[复制链接]
已绑定手机

176

主题

624

回帖

1562

积分

金牌会员

积分
1562
 楼主| 发表于 2024-7-17 08:32:35 | 显示全部楼层
tzz1*** 发表于 2024-7-16 22:41
嗯 , 是的, 就是用串口输出, 用串口助手查看.  

一般来说, 硬件设计时 UART1的 P30 ,P31本来就用来ISP下 ...

仿真太难用了,硬仿和软仿我都用了,实在不想用,达不到自己要的效果,使用起来很不方便,我觉得你说的这个方法比仿真好用,我昨天也查了相关资料,感谢分享之路。
回复

使用道具 举报 送花

已绑定手机

176

主题

624

回帖

1562

积分

金牌会员

积分
1562
 楼主| 发表于 2024-7-17 08:44:15 | 显示全部楼层
hsr*** 发表于 2024-7-16 18:28
用printf的话有个小坑要注意一下。
我当时给OS任务切换用的是T0的NMI中断,printf用太多之后打印消息已经 ...

感谢提醒,信息量很大,我得慢慢消化,
回复

使用道具 举报 送花

已绑定手机

176

主题

624

回帖

1562

积分

金牌会员

积分
1562
 楼主| 发表于 2024-7-17 08:44:54 | 显示全部楼层
tzz1*** 发表于 2024-7-16 22:30
不要使用 while(!TI) 这种方式就没问题, 我想就算这样使用也没问题,
你出问题可能是在如果在多个任务中使 ...

研究一下,感谢指点。
回复

使用道具 举报 送花

已绑定手机

176

主题

624

回帖

1562

积分

金牌会员

积分
1562
 楼主| 发表于 2024-7-17 08:48:39 | 显示全部楼层
tzz1*** 发表于 2024-7-16 22:41
嗯 , 是的, 就是用串口输出, 用串口助手查看.  

一般来说, 硬件设计时 UART1的 P30 ,P31本来就用来ISP下 ...

对于使用P3.0和P3.1口串口通信,我之前遇到,我烧写完程序,烧写线不拔掉,程序就出现异常,正常我是拔掉的,偶尔不拔掉时遇到这种情况

点评

有两套相互冲突的电源, 比如, 你系统是用的3.3V自带电源, 烧写器给5V的电源, 此时就会出问题 , 另外,如果有两套电源同时存在, 就算是电压相同也会出问题,因为两套电源不会绝对相等,而且电压高的电源会反向  详情 回复 发表于 2024-7-17 11:00
回复

使用道具 举报 送花

37

主题

1172

回帖

3080

积分

荣誉版主

积分
3080
发表于 2024-7-17 11:00:13 | 显示全部楼层
本帖最后由 tzz1983 于 2024-7-17 11:04 编辑
38009*** 发表于 2024-7-17 08:48
对于使用P3.0和P3.1口串口通信,我之前遇到,我烧写完程序,烧写线不拔掉,程序就出现异常,正常我是拔掉 ...

有两套电源同时存在,比如, 你系统是用的3.3V自带电源, 烧写器给5V的电源, 两套电源同时出现就会出问题 .
  
另外,如果有两套电源同时存在, 就算是电压相同也会出问题,
因为两套电源不会绝对相等,电压高的电源会对电压低的电源进行 “反充”, 严重时可能烧毁器件。
解决办法是,如果板自带电源, 去掉一LINK的VCC输出线,三线连接, 保存 GND, RX, TX ,即可

还有一种出问题的可能, P30 P31 除了用作串口外, 还用作了其它用途, 这个比较泛,看具体应用,说不清楚。
回复

使用道具 举报 送花

已绑定手机

176

主题

624

回帖

1562

积分

金牌会员

积分
1562
 楼主| 发表于 2024-7-17 16:09:33 | 显示全部楼层
tzz1*** 发表于 2024-7-17 11:00
有两套电源同时存在,比如, 你系统是用的3.3V自带电源, 烧写器给5V的电源, 两套电源同时出现就会出问题 ...

分析的太到位了,这两个脚除了烧写程序,没有的别的用途,应该是电源的事,最近再测试就可以试一下了;不过,我用STM32F1的板子试过,烧程序和串口通信同时,两路供电是没有问题的,我记得有的烧写器供电不足,就需要两路同时供电,才能烧写,英飞凌的芯片是这样,时间久了,记忆也不一定对,记得是这样,
回复

使用道具 举报 送花

已绑定手机

176

主题

624

回帖

1562

积分

金牌会员

积分
1562
 楼主| 发表于 2024-7-18 14:47:56 | 显示全部楼层
tzz1*** 发表于 2024-7-16 16:04
你学一学自己分析问题。
用 printf() 在程序运行关键点输出一些信息,以助于分析代码的运行轨迹。

这个我试了一下,真的太好用了,想知道哪个点执行不执行,以前我都是看效果,确实不知道是不是执行了,推荐大家使用,方便,串口1 :地、发送、接受三根线,不要电源,多接了电源,程序运行就异常了,再次感谢。
回复

使用道具 举报 送花

已绑定手机

176

主题

624

回帖

1562

积分

金牌会员

积分
1562
 楼主| 发表于 2024-7-19 08:53:43 | 显示全部楼层

printf打印乱码问题已经解决,设置问题

本帖最后由 380091044 于 2024-7-19 11:28 编辑
tzz1*** 发表于 2024-7-16 22:30
不要使用 while(!TI) 这种方式就没问题, 我想就算这样使用也没问题,
你出问题可能是在如果在多个任务中使 ...

你的代码,我看了,也测试了,打印也是没问题的,同样的,我对比了熊仔的代码,打印测试这块写的也是有问题的,打印出来乱码,
他的代码如下:



DebugPrintf.c文件



/*************髡夔佽隴**************
婦漪printf垀剒滲杅ㄛ笭隅砃善揹諳怀堤ㄛ褫蚚衾覃彸湖荂陓洘.
******************************************/
#include "FreeRTOS.h"
#include "DebugPrintf.h"
#define Baudrate      9600L
#define TM            (65536 -(MAIN_Fosc/Baudrate/4))
#define PrintUart     1        //1:printf 妏蚚 UART1; 2:printf 妏蚚 UART2
/******************** 揹諳湖荂滲杅 ********************/
void DebugPrintfInit(void)
{
#if(PrintUart == 1)
        SCON = (SCON & 0x3f) | 0x40;
        AUXR |= 0x40;                //隅奀奀笘1T耀宒
        AUXR &= 0xFE;                //揹諳1恁寁隅奀1峈疏杻薹楷汜
        TL1  = TM;
        TH1  = TM>>8;
        TR1 = 1;                                //隅奀1羲宎數奀
//        P_SW1 = 0x00;//RXD/P3.0/13褐, TXD/P3.1/14褐
//        REN = 1;        //埰勍諉彶

//        SCON = (SCON & 0x3f) | 0x40;
//        T2L  = TM;
//        T2H  = TM>>8;
//        AUXR |= 0x15;   //揹諳1恁寁隅奀2峈疏杻薹楷汜
//        REN = 1;        //埰勍諉彶
#else
        P_SW2 |= 1;         //UART2 switch to: 0: P1.0 P1.1,  1: P4.6 P4.7
        S2CON = (S2CON & 0x3f) | 0x40;
        T2L  = TM;
        T2H  = TM>>8;
        AUXR |= 0x14;              //隅奀2奀笘1T耀宒,羲宎數奀
//        S2CON |= (1<<4);    //埰勍諉彶
#endif
}

void UartPutc(unsigned char dat)
{
#if(PrintUart == 1)
        SBUF = dat;
        while(TI==0);
        TI = 0;
#else
        S2BUF  = dat;
        while((S2CON & 2) == 0);
        S2CON &= ~2;    //Clear Tx flag
#endif
}


DebugPrintf.h文件如下:



#ifndef DEBUG_PRINTF_H
#define DEBUG_PRINTF_H

void DebugPrintfInit(void);

#endif


putchar.c文件如下:


/*************  髡夔佽隴    **************
笭迡printf覃蚚腔putchar滲杅ㄛ笭隅砃善揹諳怀堤ㄛ褫蚚衾覃彸湖荂陓洘.
******************************************/
#include "FreeRTOS.h"

extern void UartPutc(unsigned char dat) reentrant;
char putchar(char c)
{
        UartPutc(c);
        return c;
}


上电初始化时,打印: printf("STC32G FreeRTOS 聆彸最唗!\r\n");
打印结果如下:



打印结果是这样的

打印结果是这样的

点评

发现新大陆了,惊喜不, 话说你是学生吗?  详情 回复 发表于 2024-7-19 15:15
回复

使用道具 举报 送花

37

主题

1172

回帖

3080

积分

荣誉版主

积分
3080
发表于 2024-7-19 15:15:00 | 显示全部楼层
38009*** 发表于 2024-7-19 08:53
你的代码,我看了,也测试了,打印也是没问题的,同样的,我对比了熊仔的代码,打印测试这块写的也是有问 ...

发现新大陆了,惊喜不,  话说你是学生吗?
回复

使用道具 举报 送花

已绑定手机

176

主题

624

回帖

1562

积分

金牌会员

积分
1562
 楼主| 发表于 2024-7-20 07:44:22 | 显示全部楼层
tzz1*** 发表于 2024-7-19 15:15
发现新大陆了,惊喜不,  话说你是学生吗?

又惊又喜,看不同人的代码,犹如读不同书籍,很是过瘾,小学生级,都还没有入门呢,我是边工作,边学习,通过这几天研究,熊仔的代码问题已经解决了,移植还有问题,还在尝试中,感谢指点,你的代码真的,很不错,犹如托尔斯泰诗句,
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-9-21 01:09 , Processed in 0.087516 second(s), 90 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表