vuart.py
# هذا العمل مرخص بموجب ترخيص MIT.
# حقوق النشر (c) 2024 لشركة OpenMV LLC. جميع الحقوق محفوظة.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# يوضح هذا المثال أبسط استخدام لـ Open-AMP للتواصل بين نواتين
# على متحكمات دقيقة ثنائية النواة. لتشغيل هذا المثال، يلزم توفر برنامج ثابت (firmware) للنواة الثانوية
# وهو مطلوب. لأغراض الاختبار، يتوفر برنامج ثابت تجريبي للنواة الثانوية هنا:
# https://github.com/iabdalkader/openamp_vuart
# لتهيئة وبناء البرنامج الثابت، يرجى اتباع التعليمات الموجودة في ملف README.
#
# لاحظ أنه في معظم المتحكمات الدقيقة لا يمكن إعادة ضبط النواة الثانوية بدون
# إعادة ضبط كاملة، لذا فإن تشغيل هذا السكربت ثم إيقافه قد يؤدي إلى إعادة ضبط كاملة
# للوحة، وهذا أمر طبيعي تمامًا.
import openamp
import time
def ept_recv_callback(src_addr, data):
print("Received message: ", data.decode())
# إنشاء نقطة اتصال (endpoint) جديدة من نوع RPMsg للتواصل مع M4.
ept = openamp.Endpoint("vuart-channel", callback=ept_recv_callback)
# إنشاء كائن remoteproc، وتحميل برنامجه الثابت ثم تشغيله. لاحظ أن النواة البعيدة
# يمكنها أيضًا الإقلاع من نقطة دخول في الفلاش (مثل 0x081E0000) إذا كان هناك برنامج ثابت.
# rproc = openamp.RProc(0x08180000)
rproc = openamp.RemoteProc("vuart.elf")
rproc.start()
count = 0
while True:
if ept.is_ready():
ept.send("Hello World %d!" % count, timeout=1000)
count += 1
time.sleep_ms(1000)