硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2473|回复: 6
收起左侧

请教: DWT调试时工作不正常, 但硬复位后OK

[复制链接]

3

主题

11

回帖

20

积分

新手上路

积分
20
发表于 2018-11-12 17:18:58 | 显示全部楼层 |阅读模式
给F429移植uC/OS时遇到的,板子是基于V6自己画的


目前调通的驱动有UART_FIFO, SDRAM, LTDC,裸机时正常,通过了SDRAM测试(bsp_TestExtSDRAM1返回err为0),显示刷底色也正常

移植完uC/OS v3.04.04 (micrium官方的F429II例子@201410)以后,表象为j-link烧录完后假死,之后用串口printf跟踪初始化函数,发现卡死在SDRAM初始化的100ms延时里(调用 CPU_TS_TmrRd 的 bsp_DelayMS )

一开始怀疑初始化没加临界段保护,也注意了先初始化 CPU_Init ,再调用延时函数,无果

后来偶然发现,烧录完,按下板子上预留的硬复位按钮,或者重新上电,程序就可以正常运行

检查了Keil里的调试选项,确认和复位有关的选项与之前的项目并无不同(也就是都默认)

网上搜索到另一个帖子,也未解决:http://www.stmcu.org.cn/module/f ... read&tid=616035

求解~


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2018-11-12 17:29:06 | 显示全部楼层
看我们例子的初始化流程,在main函数里面什么都不要做,仅创建启动任务,进入启动任务后,再做下面的初始化,之后做SDRAM外设指令的初始化即可。

  1. CPU_Init();  /* 此函数要优先调用,因为外设驱动中使用的us和ms延迟是基于此函数的 */
  2. bsp_Init();
  3. BSP_Tick_Init();
复制代码


你的估计是这个问题。

  1. /*
  2. *********************************************************************************************************
  3. *        函 数 名: main
  4. *        功能说明: 标准c程序入口。
  5. *        形    参: 无
  6. *        返 回 值: 无
  7. *********************************************************************************************************
  8. */
  9. int main(void)
  10. {
  11.     OS_ERR  err;  
  12.         
  13.         /* 初始化uC/OS-III 内核 */
  14.     OSInit(&err);  

  15.         /* 创建一个启动任务(也就是主任务)。启动任务会创建所有的应用程序任务 */
  16.         OSTaskCreate((OS_TCB       *)&AppTaskStartTCB,  /* 任务控制块地址 */           
  17.                  (CPU_CHAR     *)"App Task Start",  /* 任务名 */
  18.                  (OS_TASK_PTR   )AppTaskStart,      /* 启动任务函数地址 */
  19.                  (void         *)0,                 /* 传递给任务的参数 */
  20.                  (OS_PRIO       )APP_CFG_TASK_START_PRIO, /* 任务优先级 */
  21.                  (CPU_STK      *)&AppTaskStartStk[0],     /* 堆栈基地址 */
  22.                  (CPU_STK_SIZE  )APP_CFG_TASK_START_STK_SIZE / 10, /* 堆栈监测区,这里表示后10%作为监测区 */
  23.                  (CPU_STK_SIZE  )APP_CFG_TASK_START_STK_SIZE,      /* 堆栈空间大小 */
  24.                  (OS_MSG_QTY    )0,  /* 本任务支持接受的最大消息数 */
  25.                  (OS_TICK       )0,  /* 设置时间片 */
  26.                  (void         *)0,  /* 堆栈空间大小 */  
  27.                  (OS_OPT        )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  28.                
  29.                                  /*  定义如下:
  30.                                         OS_OPT_TASK_STK_CHK      使能检测任务栈,统计任务栈已用的和未用的
  31.                                         OS_OPT_TASK_STK_CLR      在创建任务时,清零任务栈
  32.                                         OS_OPT_TASK_SAVE_FP      如果CPU有浮点寄存器,则在任务切换时保存浮点寄存器的内容
  33.                                  */  
  34.                  (OS_ERR       *)&err);

  35.         /* 启动多任务系统,控制权交给uC/OS-III */
  36.     OSStart(&err);                                               
  37.    
  38.     (void)&err;
  39.    
  40.     return (0);
  41. }

  42. /*
  43. *********************************************************************************************************
  44. *      函 数 名: AppTaskStart
  45. *      功能说明: 这是一个启动任务,在多任务系统启动后,必须初始化滴答计数器。本任务主要实现按键和触摸检测。
  46. *      形    参: p_arg 是在创建该任务时传递的形参
  47. *      返 回 值: 无
  48.         优 先 级: 2
  49. *********************************************************************************************************
  50. */
  51. static  void  AppTaskStart (void *p_arg)
  52. {
  53.         OS_ERR      err;
  54.         uint8_t  ucCount = 0;
  55.         uint8_t  ucCount1 = 0;
  56.         
  57.     /* 仅用于避免编译器告警,编译器不会产生任何目标代码 */        
  58.     (void)p_arg;  
  59.         
  60.         /* BSP 初始化。 BSP = Board Support Package 板级支持包,可以理解为底层驱动。*/
  61.         CPU_Init();  /* 此函数要优先调用,因为外设驱动中使用的us和ms延迟是基于此函数的 */
  62.         bsp_Init();      
  63.         BSP_Tick_Init();  
  64.         
  65. #if OS_CFG_STAT_TASK_EN > 0u
  66.      OSStatTaskCPUUsageInit(&err);   
  67. #endif

  68. #ifdef CPU_CFG_INT_DIS_MEAS_EN
  69.     CPU_IntDisMeasMaxCurReset();
  70. #endif
  71.                
  72.         /* 创建应用程序的任务 */
  73.         AppTaskCreate();
  74.         
  75.         /* 创建任务通信 */
  76.         AppObjCreate();
  77.         
  78.     while(1)
  79.     {
  80.                 /* 1ms一次触摸扫描,电阻触摸屏 */
  81.                 if(g_tTP.Enable == 1)
  82.                 {
  83.                         TOUCH_Scan();
  84.                         
  85.                         /* 按键扫描 */
  86.                         ucCount++;
  87.                         if(ucCount == 10)
  88.                         {
  89.                                 ucCount = 0;
  90.                                 bsp_KeyScan();
  91.                         }
  92.                     OSTimeDly(1, OS_OPT_TIME_DLY, &err);                        
  93.                 }
  94.                
  95.                 /* 20ms一次触摸扫描,电容触摸屏GT811
  96.                    GT811取20ms比较稳定,取10ms偶尔会有跳动。
  97.                 */
  98.                 if(g_GT811.Enable == 1)
  99.                 {
  100.                         bsp_KeyScan();
  101.                         ucCount1++;
  102.                         if(ucCount1 == 2)
  103.                         {
  104.                                 ucCount1 = 0;
  105.                                 GT811_OnePiontScan();
  106.                         }
  107.                     OSTimeDly(10, OS_OPT_TIME_DLY, &err);               
  108.                 }
  109.                
  110.                 /* 10ms一次触摸扫描,电容触摸屏FT5X06 */
  111.                 if(g_tFT5X06.Enable == 1)
  112.                 {
  113.                         bsp_KeyScan();
  114.                         FT5X06_OnePiontScan();
  115.                     OSTimeDly(10, OS_OPT_TIME_DLY, &err);
  116.                 }
  117.     }     
  118. }
复制代码



回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2018-11-12 18:31:20 | 显示全部楼层
感谢神速回复~

main函数里是这样的,和老大的例子保持了一致

刚才做了另一个实验,把今年春节在V6上写的项目DEMO烧回到V6板子上,同样是必须硬复位

以及,烧录“基于uCOS-III+STemWin+FatFS+ARM_DSP_Lib的二代示波器Demo”后,也是需要硬复位

现在怀疑是我这个j-link有问题,或者j-link的驱动 / Keil没装好

环境:
jlink版本 - taobao j-link v8,没有单独安装segger的j-link驱动,使用Keil自带的
Keil5 v5.24a
装了5.24 keil4工程兼容包

再稍试下,解决不了就等下次重装windows时再鼓捣,有了答案会来结帖
回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2018-11-12 19:02:50 | 显示全部楼层
没忍住,装了个稍旧的SEGGER的j-link驱动 Setup_JLink_V502f.exe

竟然好了……

这样一个疏忽卡了一天,真的是……

大家注意 j-link 的驱动啊!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2018-11-13 03:33:36 | 显示全部楼层
jackjeanxp 发表于 2018-11-12 19:02
没忍住,装了个稍旧的SEGGER的j-link驱动 Setup_JLink_V502f.exe

竟然好了……

谢谢告知最后的原因。
回复

使用道具 举报

14

主题

57

回帖

99

积分

初级会员

积分
99
发表于 2020-10-28 14:45:01 | 显示全部楼层
改个驱动就可以了?
回复

使用道具 举报

19

主题

310

回帖

367

积分

高级会员

积分
367
发表于 2020-10-30 17:21:21 | 显示全部楼层
years 发表于 2020-10-28 14:45
改个驱动就可以了?

jlink 8太老了
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-20 01:17 , Processed in 0.162669 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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