[讨论] 只为uC而生,uS成长历程 15

辛昕   2013-8-15 00:03 楼主
今晚改变了一些顺序

比如先写日记,再写uS,早先的时间仍然是另外一个任务
现在每天晚上大概都只能做两件事而已。
其实,我从十点半开始转入考虑uS,中间花去大概40分钟洗澡加写日记。

所以,接下来,我首先把画好的 uSConsole和Apper的交互关系图,然后还要尽量实现第一部分。

在 uSConsole中向外部发送数据,因为接口涉及到 超时,还要给uS加入 公共库,实现起来也许略带复杂,今晚可能无法完成。

好了,先上图!

未命名.JPG

回复评论 (7)

第一步,我们就体会到了之前在Timer上做的努力的成效

在我得到上面一幅图时,实际上,我仍然不是十分清楚如何植入这一部分。

然而我考虑到既然我已经实现了第一个TimerIsr,那么很自然的,我只需要用类似的方法,去植入就好了。

于是我采用类似的方法,在uS中的相应部分,首先试着加入 初始化部分。

并用它取代我 昨天测试用的 在 main函数里直接加入 的 串口初始化函数。

这个过程非常简单,而且也很小步,很安全。

而且实现的非常快,试一下串口功能,仍然正常,真棒!
点赞  2013-8-15 00:10
WOW,快1点了。
如前所述,我基本完成了 把 发送做进uS里。

然后,也对上一个帖子时做的 初始化函数做了一些改动。

这个时候,我开始注意到,uSer里那个uSCore模块需要改名字了
它应该叫做uSTimer更恰当

这是因为
我把uSConsole单独做成另一个模块,这是恰当的。

事实上,它和uSCore也就是以后将改名为uSTimer的模块 共同构成uSCore

其实uSCore 这个逻辑结构部件的存在并不是非要一个模块命名来标示。

这个话题我们稍后讨论

今晚老规矩,我将现有代码 贴上来,在下一个帖子

在这里,我需要一个略有点奇怪的问题

不知道为什么,当我在uS里发出 测试用的 信息

“Hello!uS-v0.2"时,我发现 主函数里的 “This is uS-v0.2”发不出了
然而,我关掉前一句,它又正常了

从直觉来看
我认为这不是代码的关系,可能是某种操作上的或者是串口发送的延迟之类的?
总之我初步判断不是 uS的实现问题。
点赞  2013-8-15 01:00

uS里新增加的 uSConsole模块

  1. #ifndef _US_CONSOLE_
  2. #define _US_CONSOLE_

  3. #include "typedef.h"

  4. typedef struct
  5. {
  6.     void (*uSConsoleRegist)(void);
  7.     void (*uSConsole_SendString)(U8 *Buffer,U8 BuffLen);
  8. }uSConsoleStr;

  9. void uSConsoleStr_Initial(uSConsoleStr *Str);
  10. void uSConsoleStr_Copy(uSConsoleStr *Dest,uSConsoleStr *Src);

  11. void uSConsole_TestInitial(void (*pSendString)(U8 *Buffer,U8 BuffLen));
  12. void uSConsole_Test(void);

  13. #endif
  1. #include "uSConsole.h"
  2. #include "typedef.h"
  3. #include "CommonMacro.h"
  4. #include

  5. #include "uSRegister.h"

  6. #define TEST_STRING  "Hello,uSConsole!"

  7. void uSConsoleStr_Initial(uSConsoleStr *Str)
  8. {
  9.      Str->uSConsoleRegist = NULL;
  10.      Str->uSConsole_SendString = NULL;
  11. }

  12. void uSConsoleStr_Copy(uSConsoleStr *Dest,uSConsoleStr *Src)
  13. {
  14.      Dest->uSConsoleRegist = Src->uSConsoleRegist;
  15.      Dest->uSConsole_SendString = Src->uSConsole_SendString;
  16. }

  17. //==============================================================================
  18. static void (*uSConsoleSend_TestFunc)(U8 *Buffer,U8 BuffLen) = NULL;

  19. void uSConsole_TestInitial(void (*pSendString)(U8 *Buffer,U8 BuffLen))
  20. {
  21.      if(pSendString != NULL)
  22.         uSConsoleSend_TestFunc = pSendString;
  23. }

  24. void uSConsole_Test(void)
  25. {
  26.      if(uSConsoleSend_TestFunc != NULL)
  27.         uSConsoleSend_TestFunc(TEST_STRING,sizeof(TEST_STRING));
  28. }

  29. // end of file -----------------------------------------------------------------

[ 本帖最后由 辛昕 于 2013-8-15 01:06 编辑 ]
点赞  2013-8-15 01:01

加入uSRegister模块(看加粗字体)

  1. typedef struct
  2. {
  3.      uSCore_RegistStruct uSCoreReg;
  4.      uSCore_PosterStruct uSCorePoster;
  5.      
  6.    uSConsoleStr   uSConsoleReg;
  7. }uS_Struct;
  1. void uS_StructInitial(uS_Struct *Str)
  2. {
  3.      uSCore_Regist_Init(&(Str->uSCoreReg));
  4.      uSCore_Poster_Init(&(Str->uSCorePoster));
  5.      
  6.     uSConsoleStr_Initial(&(Str->uSConsoleReg));
  7. }
  1. void uSRegist(uS_Struct *Str)
  2. {
  3.     uS_StructInitial(&uSRegister);
  4.         
  5.     uSCore_RegistStruct_Copy(&(uSRegister.uSCoreReg),&(Str->uSCoreReg));
  6.     uSConsoleStr_Copy(&(uSRegister.uSConsoleReg),&(Str->uSConsoleReg));
  7.    
  8.     // Initial TimerInterrupt;
  9.     (*(Str->uSCoreReg.TimerInitial))();
  10.    

[ 本帖最后由 辛昕 于 2013-8-15 01:05 编辑 ]
点赞  2013-8-15 01:03

到了uS_App里事情更加简单,我们只需改变两行代码

  1. void uS_Initializer(void)
  2. {
  3.      uS_StructInitial(&uSRegistStr);
  4.      
  5.      uSRegistStr.uSCoreReg.TimerInitial = Timer_Initial;
  6.      uSRegistStr.uSCoreReg.Led_4_Test = uCGpio_Toggle;
  7.      
  8.      uSRegistStr.uSConsoleReg.uSConsoleRegist = Uart2_Initial;
  9.      uSRegistStr.uSConsoleReg.uSConsole_SendString = Uart2_SendString;
  10.      
  11.      uSRegist(&uSRegistStr);
  12.      
  13.      // insert uSer to Apper
  14.      set_uSTimerIsr(uSRegistStr.uSCorePoster.TimerTask);
  15. }
点赞  2013-8-15 01:04
晚安!
点赞  2013-8-15 01:06
抢个沙发,顶一个!
点赞  2013-8-15 03:03
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复