使用通义千问,为c代码生成程序流程图
·
上篇文章我们介绍了结合通义千问和plantuml为c代码生成序列图,这篇文章我结合用用通义千问,为c代码生成程序流程图,使用的工具是通义千问和mermaid( Mermaid 是一个基于 JavaScript 的图表工具,可以用 Markdown 语法定义和修改图表,可以自行百度一下),操作步骤如下:
提示词:
#include <stdint.h>
#include <stdbool.h>
// 假定的宏定义和类型定义,实际项目中这些应该来源于相应的头文件
#define PowerMode_ON (1)
#define Door_Sts_Close (0x0)
#define ICC_AutolockSts_Enable (0x1)
#define CentralLockingReq_Lock (0x2)
#define BMS_HVBattThermRunaway_Warning (0x1)
#define VehicleSpeed_Valid (0x0)
// 假定的输入输出接口宏
#define RTE_Get_PowerMode() /* 实际函数调用来获取电源状态 */
#define RTE_Get_LHFdoorSts() /* 获取左前门状态 */
#define RTE_Get_LHRdoorSts() /* 获取左后门状态 */
#define RTE_Get_RHFdoorSts() /* 获取右前门状态 */
#define RTE_Get_RHRdoorSts() /* 获取右后门状态 */
#define RTE_Get_ICC_AutolockSts() /* 获取自动落锁设置状态 */
#define RTE_Get_Config_AutoLock() /* 获取配置字车速自动上锁状态 */
#define RTE_Get_BMS_HVBattThermRunaway() /* 获取热失控状态 */
#define RTE_Get_VehicleSpeedVSOSig() /* 获取车速信号 */
#define RTE_Get_VehicleSpeedVSOSigValidData() /* 获取车速信号有效性 */
#define RTE_Set_CentralLockingReq(val) /* 设置中央门锁请求信号 */
// 初始化函数
void AutoLock_Init(void);
// 模块运行函数,每200ms运行一次,符合题目要求的执行周期
void AutoLock_runnable_200ms(void);
bool isDoorClosed(void);
bool isAutoLockEnabled(void);
bool isVehicleSpeedAboveThreshold(void);
void AutoLock_Init(void) {
// 这里可以放置任何必要的初始化逻辑
}
void AutoLock_runnable_200ms(void) {
// 获取各个条件的状态
bool powerOn = RTE_Get_PowerMode() == PowerMode_ON;
bool doorsClosed = isDoorClosed();
bool autoLockEnabled = isAutoLockEnabled();
bool configAutoLockSet = RTE_Get_Config_AutoLock() == 0x1;
bool thermRunawayNotWarning = RTE_Get_BMS_HVBattThermRunaway() != BMS_HVBattThermRunaway_Warning;
bool vehicleSpeedValid = RTE_Get_VehicleSpeedVSOSigValidData() == VehicleSpeed_Valid;
bool speedAbove15kmh = isVehicleSpeedAboveThreshold();
// 检查使能条件
if (powerOn && doorsClosed && autoLockEnabled && configAutoLockSet && thermRunawayNotWarning) {
// 检查触发条件
if (vehicleSpeedValid && speedAbove15kmh) {
// 执行输出
RTE_Set_CentralLockingReq(CentralLockingReq_Lock);
// 这里假设直接通过CAN发送信号,实际可能需要更复杂的CAN消息构建逻辑
// 注意:驱动电机的逻辑未包含,因为这通常涉及到硬件控制细节,且未给出具体接口
// 实际应用中,可能需要调用特定的电机驱动函数或设置硬件寄存器
// 假设驱动电机逻辑已封装在其他地方处理
}
}
}
bool isDoorClosed(void) {
return (RTE_Get_LHFdoorSts() & RTE_Get_LHRdoorSts() &
RTE_Get_RHFdoorSts() & RTE_Get_RHRdoorSts()) == Door_Sts_Close;
}
bool isAutoLockEnabled(void) {
return RTE_Get_ICC_AutolockSts() == ICC_AutolockSts_Enable;
}
bool isVehicleSpeedAboveThreshold(void) {
// 假定车速有效时,获取车速并判断是否大于15km/h
uint16_t vehicleSpeed = RTE_Get_VehicleSpeedVSOSig();
// 这里简化处理,实际转换依据具体车速单位和传感器特性
return vehicleSpeed > 15; // 假定单位已转换为合适的值
}
为以上代码生成流程图,可以使用mermaid格式
千问回复如下:
graph TD;
A[AutoLock_Init()] --> B{Power On?};
B -- No --> E[End];
B -- Yes --> C{Doors Closed?};
C -- No --> E;
C -- Yes --> D{Auto Lock Enabled?};
D -- No --> E;
D -- Yes --> F{Config Auto Lock Set?};
F -- No --> E;
F -- Yes --> G{Therm. Runaway Not Warning?};
G -- No --> E;
G -- Yes --> H{Vehicle Speed Valid?};
H -- No --> E;
H -- Yes --> I{Speed > 15km/h?};
I -- No --> E;
I -- Yes --> J[RTE_Set_CentralLockingReq(Lock)];
J --> K[End];
subgraph Helper Functions
L(isDoorClosed())
M(isAutoLockEnabled())
N(isVehicleSpeedAboveThreshold())
end
C -->|No| L
D -->|No| M
I -->|No| N
这段Mermaid语法描述了上述代码的流程图。它从初始化开始,然后按照条件分支判断电源状态、车门关闭状态、自动落锁启用状态、配置自动上锁设定、热失控警告状态、车速信号有效性,直至判断车速是否超过15km/h,最终决定是否发送中央门锁锁定请求。同时,流程图中包含了三个辅助函数:isDoorClosed()、isAutoLockEnabled()、isVehicleSpeedAboveThreshold(),它们代表了判断车门状态、自动落锁状态和车速是否达标的功能。
将mermaid脚本代码copy到mermaid编辑器中,在线工具见以下网页:



代码copy进去以后,会提示错误,应为那几个括号不符合语法,修改下把括号去掉。

修改后可以正常显示右边的截图了。
清晰地图如下:

也可以把将英文修改为中文描述,更容易理解,只需在千问中编写提示词,将图修改为中文,回复如下:
graph TD;
A[自动上锁初始化] --> B{电源开启?};
B -- 否 --> E[结束];
B -- 是 --> C{车门关闭?};
C -- 否 --> E;
C -- 是 --> D{自动上锁已启用?};
D -- 否 --> E;
D -- 是 --> F{自动上锁配置设定?};
F -- 否 --> E;
F -- 是 --> G{未警告热失控?};
G -- 否 --> E;
G -- 是 --> H{车速有效?};
H -- 否 --> E;
H -- 是 --> I{速度>15km/h?};
I -- 否 --> E;
I -- 是 --> J[RTE_设置中央门锁请求(上锁)];
J --> K[结束];
subgraph 辅助函数
L(检查车门是否关闭)
M(检查自动上锁是否启用)
N(检查车速是否超过阈值)
end
C -->|否| L
D -->|否| M
I -->|否| N
之后copy生图,如下:

清晰大图如下:

好了,今天我们就介绍完了怎么结合千问和mermaid生成流程图,后边在给大家介绍更多的应用场景。
更多推荐

所有评论(0)