OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6525|回复: 7

STM32F407 使用内部flash和ucos冲突

[复制链接]

5

主题

36

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-5-21
在线时间
6 小时
发表于 2021-8-17 11:15:37 | 显示全部楼层 |阅读模式
20金钱
目前使用F407嵌入ucos 工作正常,然后在此基础上移植原子的操作内部flash的代码,发现个奇怪的问题,如果在调动ucos的OSTimeDlyHMSM(0, 0, 0, 20);之前(即为创建任务也未调用OSTimeDlyHMSM函数)写flash都能保存,读取也都正常。但是一旦系统运行后即调用过OSTimeDlyHMSM(0, 0, 0, 10);后 再写内部flash就失败,通过打断点发现再写flash时总是进入 系统的延时函数里

然后写失败。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

592

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1458
金钱
1458
注册时间
2019-7-28
在线时间
137 小时
发表于 2021-8-17 11:23:02 | 显示全部楼层
可以看看我们的综合例程
回复

使用道具 举报

7

主题

480

帖子

0

精华

高级会员

Rank: 4

积分
783
金钱
783
注册时间
2021-4-15
在线时间
305 小时
发表于 2021-8-17 11:29:55 | 显示全部楼层
停止任务调度,写完再开启 #define TEXT_LENTH sizeof(TEXT_Buffer)/2 试一下吧这个后面加是/2看看
日常敲键--头秃一片
回复

使用道具 举报

5

主题

36

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-5-21
在线时间
6 小时
 楼主| 发表于 2021-8-17 11:54:24 | 显示全部楼层
lpwithv 发表于 2021-8-17 11:23
可以看看我们的综合例程

我看了综合例程里没有使用内部flash 都是用的外部的
回复

使用道具 举报

5

主题

36

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-5-21
在线时间
6 小时
 楼主| 发表于 2021-8-17 11:57:15 | 显示全部楼层
日渐秃兀 发表于 2021-8-17 11:29
停止任务调度,写完再开启 #define TEXT_LENTH sizeof(TEXT_Buffer)/2 试一下吧这个后面加是/2看看

尝试了关闭任务及中断,都不行就是只要主函数执行过 OSTimeDlyHMSM这个函数然后再写flash就不成功,在 OSTimeDlyHMSM这个函数之前怎么读写都没有问题。
比较奇怪调用delay_ms(10);  这个函数没有关系。


OS_ENTER_CRITICAL();                       
  STMFLASH_Write(INST_infor_adress, INST_infor, 2);
OS_EXIT_CRITICAL();                               
回复

使用道具 举报

7

主题

480

帖子

0

精华

高级会员

Rank: 4

积分
783
金钱
783
注册时间
2021-4-15
在线时间
305 小时
发表于 2021-8-17 12:14:42 | 显示全部楼层
lixiaoxu186 发表于 2021-8-17 11:57
尝试了关闭任务及中断,都不行就是只要主函数执行过 OSTimeDlyHMSM这个函数然后再写flash就不成功,在 OS ...

#define TEXT_LENTH sizeof(TEXT_Buffer)/2 试改一下 还是不行 就不清楚了
日常敲键--头秃一片
回复

使用道具 举报

5

主题

36

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-5-21
在线时间
6 小时
 楼主| 发表于 2021-8-17 13:50:58 | 显示全部楼层
刚刚测试了下 正点原子的例程 在   例程实验56 UCOSII实验1-1-任务调度  中添加 存储flash的代码也存在这个问题,只有在创建任务之前写flash好使,一旦创建任务后 写flash就失效了。
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "stmflash.h"
  6. #include "includes.h"

  7. //ALIENTEK ì½Ë÷ÕßSTM32F407¿a·¢°å êμÑé56
  8. //UCOSIIêμÑé1-èÎÎñμ÷¶è -¿aoˉêy°æ±¾
  9. //¼¼êõÖ§3Ö£owww.openedv.com
  10. //ìÔ±|μêÆì£ohttp://eboard.taobao.com  
  11. //1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾  
  12. //×÷ÕߣoÕyμãÔ-×ó @ALIENTEK


  13. /////////////////////////UCOSIIèÎÎñéèÖÃ///////////////////////////////////
  14. //START èÎÎñ
  15. //éèÖÃèÎÎñóÅÏè¼¶
  16. #define START_TASK_PRIO                              10 //¿aê¼èÎÎñμÄóÅÏè¼¶éèÖÃÎa×îμí
  17. //éèÖÃèÎÎñ¶ÑÕ»′óD¡
  18. #define START_STK_SIZE                                  64
  19. //èÎÎñ¶ÑÕ»       
  20. OS_STK START_TASK_STK[START_STK_SIZE];
  21. //èÎÎñoˉêy
  22. void start_task(void *pdata);       
  23.                           
  24. //LED0èÎÎñ
  25. //éèÖÃèÎÎñóÅÏè¼¶
  26. #define LED0_TASK_PRIO                               7
  27. //éèÖÃèÎÎñ¶ÑÕ»′óD¡
  28. #define LED0_STK_SIZE                                      64
  29. //èÎÎñ¶ÑÕ»       
  30. OS_STK LED0_TASK_STK[LED0_STK_SIZE];
  31. //èÎÎñoˉêy
  32. void led0_task(void *pdata);


  33. //LED1èÎÎñ
  34. //éèÖÃèÎÎñóÅÏè¼¶
  35. #define LED1_TASK_PRIO                               6
  36. //éèÖÃèÎÎñ¶ÑÕ»′óD¡
  37. #define LED1_STK_SIZE                                          64
  38. //èÎÎñ¶ÑÕ»
  39. OS_STK LED1_TASK_STK[LED1_STK_SIZE];
  40. //èÎÎñoˉêy
  41. void led1_task(void *pdata);
  42. u32 te = 87432;

  43. u8 id=  1;
  44. int main(void)
  45. {

  46.         delay_init(168);                  //3õê¼»ˉÑóê±oˉêy
  47.         LED_Init();                        //3õê¼»ˉLED¶Ë¿ú
  48.         STMFLASH_Write(Temp_adress,&te,1);//正常
  49.         OSInit();   
  50.         OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//′′½¨Æeê¼èÎÎñ
  51.         OSStart();       
  52. }

  53. //¿aê¼èÎÎñ
  54. void start_task(void *pdata)
  55. {
  56.     OS_CPU_SR cpu_sr=0;
  57.         pdata = pdata;

  58.           OS_ENTER_CRITICAL();                        //½øèëáù½çÇø(ÎT·¨±»ÖD¶Ï′ò¶Ï)   
  59.         OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);                                                  
  60.         OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);                                           
  61.         OSTaskSuspend(START_TASK_PRIO);        //1òÆeÆeê¼èÎÎñ.
  62.         OS_EXIT_CRITICAL();                                //íË3öáù½çÇø(¿éòÔ±»ÖD¶Ï′ò¶Ï)
  63. }

  64. //LED0èÎÎñ
  65. void led0_task(void *pdata)
  66. {                
  67.         while(1)
  68.         {
  69.                 LED0=0;
  70.                 delay_ms(80);
  71.                 if(id == 1)
  72.                 {
  73.                         STMFLASH_Write(Temp_adress,&te,1);//′写入失败
  74.                         id = 0;
  75.                 }
  76.                 LED0=1;
  77.                 delay_ms(920);
  78.         };
  79. }
复制代码
回复

使用道具 举报

5

主题

36

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-5-21
在线时间
6 小时
 楼主| 发表于 2021-8-17 13:58:43 | 显示全部楼层
使用正点原子的ucos 例程 实验56 UCOSII实验1-1-任务调度 ,然后在此基础上添加flash读写文件,现象是一样的,只有在创建任务之前写flash才正常,如果创建任务以后 flash写失败。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-24 16:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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