最近,使用F4CubeMX 生成基于F407的USB HOST的代码,的确非常方便,代码质量也很规范整齐。但是在调试USB的驱动过程中遇到一个问题,在文件stm32f4xx_ll_usb.c中,有一个函数如下:
HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_HCTypeDef *hc, uint8_t dma)
{
......
if (hc->xfer_len > 0)
{
num_packets = (hc->xfer_len + hc->max_packet - 1) / hc->max_packet; //是否会出现除0的情形
if (num_packets > max_hc_pkt_count)
{
......
}
......
}
当时由于程序的错误, 被除数hc->max_packet的值是0,但吊诡的是,这一句居然也能顺利执行,没有激活任何中断。
难道STM32即使除以 0 都可以安然无恙?
|