页次: 1
@lyon1998
又遇到问题了,不确定是否跟这个回调有关。
FreeRTOS中,一个任务跑python虚拟机。然后创建RTOS里的软件定时器。创建了两个定时器。
定时器回调里调用pks_eventLisener_sendSignal发送信号。
python里定时器回调:
def timer_cbA(signal):
print('timer cb_A: ',signal)
def timer_cbB(signal):
print('timer cb_B: ',signal)
python里有while周期闪烁LED
当这两个定时器时间周期里,刚好同一时刻触发,python任务就没反应,LED停了。
后来将C代码fputc函数里的代码注释掉测试,故障依旧。
在这之前遇到过IO触发回调,python回调函数里有print,当print时刚好python里也有print,就会出现,去掉print代码又正常。
@lyon1998
刚latest了,看到PIKA_TAB_ENABLE改为关闭了。strdup 仍有提示
.\objects\template.axf: Error: L6218E: Undefined symbol strdup (referred from pikaobj.o).
在getFilteredCompletions函数里还有用到,而getFilteredCompletions只有在#if PIKA_TAB_ENABLE里的代码用到。
我临时更改将这函数里的代码#if PIKA_TAB_ENABLE起来,测试OK了
文档中心里的示例按理应该有测试过,前面最初的事件回调singalCode,这些基本应用应该容易发现
这个问题我也发现了,是内部 bug,我已经修改了,需要更新一下版本:
pikascript-core==latest
PikaStdLib==latest
此外,似乎向一个PikaEventListener用两个不同EventId,regist两个EventCallback。
pika_eventListener_registEventCallback(DIN_event_listener,port,eventCallBack);
DIN_event_listener : 同一个全局PikaEventListener
port : EventId,两次传入的为不同的值
eventCallBack : python里传过来函数,两次不同
使用两个EventId触发pika_eventListener_sendSignal,python里触发调用的都只是其中一个函数。
先触发哪个就一直是哪个。
更新前是V1.13.4,更新后是一串数字87640856fa447be1ab1f70668994b55aeeaade5e
更新后,在keil里有提示error
linking...
.\objects\template.axf: Error: L6218E: Undefined symbol strdup (referred from pikaobj.o).
.\objects\template.axf: Error: L6218E: Undefined symbol strndup (referred from pikaobj.o).
Not enough information to list load addresses in the image map.
Not enough information to list image symbols.
这个strdup和strndup好像之前没有的。
移植到单片机,做事件回调时参考:https://pikapython.com/doc/coreapi_event.html
单片机IO口触发,C语言通过pks_eventLisener_sendSignal发送信号。
python代码:
def callback(signal):
print('callback,signal:',signal)
测试C代码:
PikaEventListener* g_pika_user_listener;
uint32_t EventId = 0;
void Device_DigitalInput_setCallBack(PikaObj *self, Arg* eventCallBack)
{
if(NULL==g_pika_user_listener)
{
pika_eventListener_init(&g_pika_user_listener);
}
uint32_t eventId = EventId;
// 将这个事件注册进监听器
pika_eventListener_registEventCallback(g_pika_user_listener,eventId,eventCallBack);
}
void EventHandler(uint32_t code)
{
uint32_t eventId = EventId;
pks_eventLisener_sendSignal(g_pika_user_listener, eventId, code);
}
当有触发时调用EventHandler,发送信号,这个code变化,而python里打印的signal却一直是0。
再继续用code++测试发送,到16时有打印16,经观擦是低4bit被清0
这个里面是否还有其他配置,或者这个singalCode有范围?
在学习了解,参照https://gitee.com/Lyon1998/pikapython/blob/master/examples/Device/GPIO_CALLBCK.py
import PikaStdDevice as std
print('hello pikascript')
io = std.GPIO()
io.setPin('P4')
io.setMode('in')
io.enable()
def cb1(signal):
print('cb1', signal)
io.setCallBack(cb1, io.SIGNAL_FALLING)
while True:
pass
在ESP32S3下,默认有看门狗,py文件里有while循环,会触发看门狗.
是哪里有触发调度的我没去处理?
参照“十分钟部署到新平台”,下载包管理器,拉取,提示错误
Updating: 2588210/2594816 (99.75%)
Downloading pikapython to /tmp/pikascript_packages...
Need about 10 min(s)
Please wait...
error decoding upload-pack response: invalid pkt-len found
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x18 pc=0x10b25d8]
goroutine 1 [running]:
github.com/go-git/go-git/v5.(*Repository).Worktree(...)
C:/Users/lyon/go/pkg/mod/github.com/go-git/go-git/v5@v5.4.2/repository.go:1412
main.updatePikascript({0xc00001dc08, 0x18})
C:/Users/lyon/Desktop/pikalab/files/tools/pikaPackageManager/main.go:465 +0x2f8
main.process()
C:/Users/lyon/Desktop/pikalab/files/tools/pikaPackageManager/main.go:161 +0xcf
main.install()
C:/Users/lyon/Desktop/pikalab/files/tools/pikaPackageManager/main.go:136 +0x2b
main.main()
C:/Users/lyon/Desktop/pikalab/files/tools/pikaPackageManager/main.go:60 +0x2ab
Error running Cmd exit status 2
页次: 1