主程序 man.c 一些声明文件
man.c创建了所有初始化
d200_camera.c 所有实现
d200_camera_run 实现了拍照
void d200_camera_run(void) {
uint8_t *pic;       // 临时存储 JPEG 数据指针
uint32_t jpeg_len;  // 临时存储 JPEG 数据长度
if (receive_status == 1) {  // 检查是否收到新帧
    receive_status = 0;     // 重置接收状态
    // 获取 JPEG 数据
    jpeg_len = bflb_mjpeg_get_frame_info(mjpeg, &pic);  // pic 指向 JPEG 数据
    bflb_mjpeg_pop_one_frame(mjpeg);  // 弹出当前帧(准备下一帧)
    bflb_l1c_dcache_invalidate_range(pic, jpeg_len);  // 缓存无效化(确保数据最新)
    // 加锁(防止多线程冲突)
    xSemaphoreTake(camera_muxsem_handle, portMAX_DELAY);
  
    // 将 JPEG 数据复制到 mjpeg_output_buffer
    for (int i = 0; i < jpeg_len; i++) {
        mjpeg_output_buffer[i] = pic[i];
    }
    pic_size = jpeg_len;  // 更新全局变量 pic_size
    xSemaphoreGive(camera_muxsem_handle);  // 解锁
    // 如果 camera_mode == 1,重新启动摄像头(准备下一帧)
    if (camera_mode == 1) {
        bflb_mjpeg_update_input_output_buff(mjpeg, dvp_buffer, NULL, mjpeg_buffer, sizeof(mjpeg_buffer));
        bflb_mjpeg_start(mjpeg);  // 重新启动 MJPEG 编码
        bflb_cam_start(cam0);    // 重新启动摄像头
    }
}
}
(2) 关键点分析
- receive_status控制拍照触发- 
- 只有当 receive_status == 1时,才会拍照并处理数据。
- 这个变量可能是由 中断 或 外部代码 设置的(例如 DMA 传输完成时置 1)。
 
- camera_mode == 1时自动重启摄像头- 
- 如果 camera_mode设为1,拍照完成后会自动重启摄像头(bflb_cam_start(cam0)),实现持续拍照。
- 如果 camera_mode是0,则 只拍一次,不会自动重启。
 
- 数据存储位置
- JPEG 数据先存放在 pic(临时指针),然后复制到mjpeg_output_buffer。
- pic_addr没有被赋值,所以目前它没有存储有效数据(可能是你想优化掉- mjpeg_output_buffer直接让- pic_addr = pic?)。
 
- 理论代码
 删除 ap_web,修复错误
 在man.c 就可以 获取
- extern uint8_t *pic_addr;
 extern uint32_t pic_size;
- 进行获取 图片 发送
- bl618_camera_task





