周小结

这周为了准备面试学了很多。

1.STM32远程升级。


flash分配如上图所示。上电首先运行bootload,bootload判断是否需要升级(服务器下发的更新标志),如果不需要升级则调到APP运行程序。如果需要升级则bootload连上升级服务器(ip和port之前应用程序已经从服务器下发得到),从升级服务器得到升级包后将升级包写入flash的0x08021000的起始地址。更新包下发完成后将更新包写入0x0800D000的起始地址。重启后bootload运行的就是更新程序了。

iar的icf文件配置:

bootload配置如下,中断向量表地址也要配置成0x08000000。APP程序一样的原理。


bootload跳转到应用程序过程:

__disable_irq(0;    //关中断

SCB->VTOR = 0x0800D000;    //中断向量表地址设置

JumpAddress = *(__IO uint32_t *)(userStartup + 4);     //uint32_t JumpAddress

Jump_To_Application = (pFunction)JumpAddress;    //typedef void (*pFunction)(void)

__set_MSP(*(__IO uint32_t *)userStartup);    //设置堆栈指针

Jump_To_Application();

=========================================================================

2.ucosii

为了准备面试回顾了下ucosii.o      (╥﹏╥)o

    2.1 OSInit()

初始化全局变量,初始化TCB链表,初始化事件链表OSEventFreeList,消息队列。

创建空闲任务和计数任务.

    2.2任务就绪表:


    2.3信号量

OS_EVENT  *OSSemCreate (INT16U cnt)

void  OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr)

INT8U  OSSemPost (OS_EVENT *pevent)

    2.4 邮箱

OS_EVENT  *OSMboxCreate (void *pmsg)

void  *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr)

INT8U  OSMboxPost (OS_EVENT *pevent, void *pmsg)

    2.5 消息队列

OS_EVENT  *OSQCreate (void **start, INT16U size)

void  *OSQPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr)

INT8U  OSQPost (OS_EVENT *pevent, void *pmsg)











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值