[通过AI学习编程]永远的编程新手小白向deepseek请教树莓派pico的PIO编程
早上坐地铁,想起raspberry pi pico的PIO还有很多迷糊的地方,掏出手机问deepseek:++++++++++++++++++++++++++++++++++++++++++++++++++++
问:同一个PIO的四个状态机可以运行不同的程序吗?
AI不仅告诉我能,而且告诉了我几个关键点,例如:
每个状态机可以加载不同的 PIO 程序。
四个状态机可以同时运行,互不干扰。
每个状态机可以处理不同的 I/O 任务,例如一个状态机控制 LED,另一个读取传感器数据。
状态机共享同一个 PIO 模块的指令内存(32 条指令)。
如果程序较短,多个状态机可以共享指令内存的不同部分。
每个状态机可以独立配置引脚映射、时钟分频等参数。
状态机之间的配置互不影响。
++++++++++++++++++++++++++++++++++++++++++++++++++++
让它举几个arduino下的编程例子,它举了几个,其中一个是这样的:
#include <RP2040_PIO.h>
// 定义 PIO 程序
const uint16_t servo_program[] = {
0xe081, // set pindirs, 1
0xe001, // set pins, 1
0x6040, // mov x, osr
0x0042, // label high
0x0042, // jmp x--, high
0xe000, // set pins, 0
0x6040, // mov x, osr
0x0042, // label low
0x0042, // jmp x--, low
};
// 初始化 PIO
RP2040_PIO pio;
uint sm = 0;
void setup() {
pio.begin();
sm = pio.addProgram(servo_program, sizeof(servo_program) / 2);
pio.setPins(sm, 0, 1); // 设置引脚 0 为输出
pio.start(sm);
}
void loop() {
// 设置伺服电机角度
pio.write(sm, 1500); // 1.5ms 脉冲,中间位置
delay(1000);
pio.write(sm, 1000); // 1.0ms 脉冲,最小角度
delay(1000);
pio.write(sm, 2000); // 2.0ms 脉冲,最大角度
delay(1000);
}
看不出啥毛病,估计可以直接c+v。
++++++++++++++++++++++++++++++++++++++++++++++++++++
看不懂pio.setPins()函数,并且不清楚把GPIO分配给PIO的SM的逻辑。继续问,它的回答:
pio.setPins() 函数用于配置状态机使用的 GPIO 引脚。它的主要作用是将一组连续的 GPIO 引脚分配给特定的状态机,以便状态机可以控制这些引脚或从这些引脚读取数据。
参数说明
sm: 状态机编号(0-3)。
pin_base: 起始 GPIO 引脚编号。
pin_count: 要分配的 GPIO 引脚数量。
is_out: 布尔值,表示这些引脚是用于输出(true)还是输入(false)。
很清楚。
++++++++++++++++++++++++++++++++++++++++++++++++++++
对pio.addProgram函数不解。这里面状态机居然不是用户指定的,而是系统自动分配的。于是继续问:
请说明一下sm = pio.addProgram()函数,并且说明一下为什么这里sm不是由用户指定的?
答:
自动管理状态机:
PIO 模块有两个 PIO 块,每个块有 4 个状态机(总共 8 个状态机)。
系统会自动管理这些状态机,确保每个状态机只加载一个程序,避免冲突。
简化用户操作:
用户不需要关心状态机的具体编号,系统会自动分配一个可用的状态机。
这样可以简化用户的操作,减少出错的可能性。
动态分配:
系统会根据当前状态机的使用情况动态分配一个空闲的状态机。
如果所有状态机都被占用,addProgram() 函数会返回一个错误或无效的状态机编号。
++++++++++++++++++++++++++++++++++++++++++++++++++++
进一步问如何编译PIO代码,给出的回答是pioasm工具,操作步骤也是一目了然的。
一路地铁下来,感觉基本上入门了。
如此强大的生成式大语言模型,据说其推理阶段的工作,简单点说,就是根据前面一大段话,综合在训练阶段它学到的“知识”,也即词汇之间的相关性,推理下一个字将会是什么。推理下一段话?不是的。只推理下一个字。要说它有智能,真是想多了。真是大力出奇迹。 俺给当前的 AI 总结了一个八字方针:博闻强记、模式识别 ;P 目前的AI只会到处找解答,然后组合,漏洞百出...找不到解答长时间五响应...
AI炒作价值远远高于实用价值,起码目前如此。 chipset009 发表于 2025-2-23 21:29
目前的AI只会到处找解答,然后组合,漏洞百出...找不到解答长时间五响应...
AI炒作价值远远高于实用价值 ...
好像你理解有误。生成式LLM的算法不是根据你的提问找解答。而是根据概率模型和神经网络,根据你敲的字,判断后面该输出什么字。而且是一个字一个字生成出来的。只要算力在,就可以输出,不存在“找不到解答”这回事。 量子隧道 发表于 2025-2-23 22:14
好像你理解有误。生成式LLM的算法不是根据你的提问找解答。而是根据概率模型和神经网络,根据你敲的字, ...
很容易验证。
下个离线版,把本地缓存清理了,本地数据库锁了,网也断了,然后问几个问题就知道了。
页:
[1]