aozima
aozima
拒绝白嫖,拒绝键盘侠!

注册于 12 years ago

回答
520
文章
3
关注者
26

ffs这个函数是有标准的,外面检查了,里面还是要按要求返回0的。

/**
 * This function finds the first bit set (beginning with the least significant bit)
 * in value and return the index of that bit.
 *
 * Bits are numbered starting at 1 (the least significant bit).  A return value of
 * zero from any of these functions means that the argument was zero.
 *
 * @return return the index of the first bit set. If value is 0, then this function
 * shall return 0.
 */

不光是调试这边用,别的代码会有引用。
目前在 mmcsd_select_voltage 中也有引用这个函数。

/*
 * Mask off any voltages we don't support and select
 * the lowest voltage
 */
rt_uint32_t mmcsd_select_voltage(struct rt_mmcsd_host *host, rt_uint32_t ocr)
{
    int bit;
    extern int __rt_ffs(int value);

    ocr &= host->valid_ocr;

    bit = __rt_ffs(ocr);

MCU上面tls握手时间要几秒很正常。
你看下这个: mbedtls+ stm32f411 握手耗时15s

性能方向

  • 使用更高主频的芯片来加速这个时间。
  • 使用硬件加速来缩短这个时间,目前可行的只有RSA,但现在都推荐使用DH,暂时还无法加速。
  • 硬件有hase和aes,也能用于加速。

协议方向

  • 使用http1.1+keepalive,一次连接,多个会话使用,避免重复握手。但只适用于小数据量。
  • 使用http2.0,一次握手,多个会话同时使用。
  • 如果属于不同的域名,以上2个方法都不适用。

  • 设备出现概率死机的现象,死机设备数量约占总数的30%。
  • 死机设备死机时刻从一上电就死至上电数小时后死不等

上面这2条与下面这2条有冲突啊

  • 通过仿真器单步仿真定位到死机位置为PendSV_Handler,当PendSV_Handler执行完后设备死机。
  • rt_system_scheduler_start函数前加while(1),死机现象消失。

仿真器单步时死机的原因应该是仿真器自动屏蔽了中断,造成线程切换不成功。
整个系统无法启动,而你的死机问题是概率性的。

while(1)这个感觉可以深入研究下。

STM32F103的RTC是个老问题了,对晶振要求非常苛刻,请确保使用的是ST推荐的晶振型号。

并不是所有平台都是很一个字节就会调用一次rx_ind的。

而且驱动一般不考虑应用层的事情,所以驱动里面做不是很合理。
但如果你的项目需要,你完全可以这样修改。只是下次移植到不同的平台时要留意这个差异。

同类型的问题,建议在原来的问题后面更新。
新开一个问题,容易分散精力。

在你关注的行,加入

#error "提示信息"

就可以很方便确认哪些行有参与编译。

如果是命令行编译,可以输出下预编译结果来确认。

  1. 有,基本可忽略。
  2. 是;可以。

特别是后面这个PR,让A系列变得简单。FT2004这个BSP就是基于这个PR来做的,你可以参考。

是否由应用中加几行来设置,比 Studio 更合适些。

可以看下memory map上面,另外64K CCM不在一起,特性也不同。

发布
问题