Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Microchip PIC => Konuyu başlatan: nusi - 23 Ocak 2016, 21:53:51

Başlık: pic e iki farklı hex kodu yükleme
Gönderen: nusi - 23 Ocak 2016, 21:53:51
selem arkadaşlar. bir sorum olacak?http://emrahbudak.com/2013/05/26/cizgi-izleyen-robot/#comment-177 (http://emrahbudak.com/2013/05/26/cizgi-izleyen-robot/#comment-177) adresindeki çizgi izleyen robotu yapmaya çalışıyorum. yalnız iki farklı hex kodu var. biri  main-on-of diğeri main- pwm bu ikisinden hangisini pic e yükleyeceğim? veya ikisi birden yüklenecekse nasıl yüklerim?
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: z - 23 Ocak 2016, 22:09:43
Benzer bir konu açacaktım unuttum senin mesajını görünce ne tesadüf dedim.

Bugün aynı durum benim de başıma geldi.

Normal şartlarda;

ARM işlemcime bir bootloder yazmıştım. Bir de uygulama programı. Herikisi iki ayrı proje.

Önce çipe bootloaderı yüklüyor daha sonra da seri port üzerinden bootloader aracılığı ile uygulama programını yüklüyordum.

İki ayrı iş olmasın hem bootloaderı hem de uygulama programını tek çırpıda yükleyebilirmiyim diye merak ettim.

IDE ortamında çoklu proje vs yapmadan hex dosyaları text editörle açıp bir dosyadaki hex kodları kopyalayıp diğer dosyanın sonuna yapıştırdım.

Daha sonra iki dosyayı barındıran bu hexi çipe attım. İstediğimi çok zahmetsiz şekile yapmış oldum.

Burada adı geçen hex dosya saf makine kodu değil.  Galiba Intel Hex format diye geçiyor yada benzeri.

Aşağıdaki gibi.

:10010000214601360121470136007EFE09D2190140
:100110002146017E17C20001FF5F16002148011928
:10012000194E79234623965778239EDA3F01B2CAA7
:100130003F0156702B5E712B722B732146013421C7
:00000001FF
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: nusi - 23 Ocak 2016, 22:14:03
hocam hex dosyasının içeriğini nasıl açarım? kusura bakmayın bira acemiyim.
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: RaMu - 23 Ocak 2016, 23:27:29
@z hocam, sakıncalı bir yöntem,
birleştirdiğin 2 hex dosyayı program memoryde farklı iki yere yazıldığından sıkıntı yok ama:

eğer iki hexde program memory de aynı yere yazılacak değerler içeriyorsa
sona eklenen hex üstüne yazılmış olacak.

@nusi hex dosyalarını kurcalama boşuna, senin işini görmez.
Yinede, notepad ile açabilirsin, herhangibir text editörü ile açabilirsin.

Emin değilsen daha güzel anlatımı olan örnek araman daha iyi olur,
üstünkörü baktım, beğenmedim,
baskı devre yapıp denememiş, ben olsam böyle örnekle vakit kaybetmem.
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: dursuncemal - 23 Ocak 2016, 23:46:07
her iki programi da kendin yazmadigin surece  veya o amacli yazilmadigi surece olmaz . senin baktigin yazilimlarda olmaz her biri ayrı ayrı amaclarla yazilmis.hangisini yuklersen o calisir.biri sensor  ile calisiyor  biri de  butonlarla
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: z - 23 Ocak 2016, 23:59:49
Ha bootloader ile uygulama programını roma atmışım ha programlayıcı ile farketmez ki. Sonuçta her iki programı da zaten ben yazdım programların hangi adreslere oturacağına da zaten yazım aşamasında karar vermiştim.





Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: Karamel - 24 Ocak 2016, 00:14:19
hocam. ben sizin boyle mesajlarinizi okumustum. keil ile bu nasil yapilir diyesormussunuz.

yanlis hatirlamiyorsam sorunuz soyle idi. iste bir program var. baska bir programda var. keilde bunlara address atiyorsunuz. daha sonra ikisinide micorocontollerin rom una yerlestiriyorsunuz. (bir seferde) daha sonra birbirileri arasinda duruma gore gecis yapiyordunuz? (yamak hocamda sormus olabilir. suan tereddute dustum)

hatta dahada yanilmiyorsam.

bir bootloader
1. program
2. program
3. program

seklindeydi. hepsinin baslangic bitis address leri belli. siz istediginizi kullaniyordunuz. sizin bootloader ile yeni yaziliminizi boyle birlestirip yapabilirsiniz?
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: dursuncemal - 24 Ocak 2016, 00:20:06
yok hocam ben sizi kast etmedim  nusi arkdasin s orusuna istinaden yazdim. sizin yazinizda bahsettiginizi tam anlamadim. arm i bilmiyorum  ama picte  hexten kesip baska hex e ekleyip program calismaz. soyle ki yazarken adres belirtip yazarsaniz belki onuda hic denemedim.
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: z - 24 Ocak 2016, 00:21:15
Normalde bootloaderı ben yüklüyordum müşterim de uygulama programımı kendisi çipe bootloader aracılığı ile yüklüyordu.

Müşteri kaytardı hem bootloader hem de uygulama programı çip üzerinde hazır gelsin dedi.

Ben de yeni bir proje oluşturmak yerine aklıma gelen bu yöntemi denedim.

Benim yöntemde hiç bir sakınca yok. Memory'nin farklı bölgelerine yerleşecek çok sayıda programın hexlerini editörde elle birleştirdiğimde amacım zaten gerçeklenmiş oluyor.

Sıralarının da önemi yok. gelişigüzel sıra ile bile kopyalasanız olur.

Yalnız başlıktaki soru benimkinden biraz farklıymış. Orda galiba bendeki gibi farklı adreslere yerleşmesi için özel uğraşılmış program yok. Dolayısı ile benim yöntem arkadaşın işini görmez.
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: dursuncemal - 24 Ocak 2016, 00:26:37
:) hatlar karisti hocam
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: MrDarK - 24 Ocak 2016, 11:54:27
Alıntı yapılan: z - 23 Ocak 2016, 23:59:49
Ha bootloader ile uygulama programını roma atmışım ha programlayıcı ile farketmez ki. Sonuçta her iki programı da zaten ben yazdım programların hangi adreslere oturacağına da zaten yazım aşamasında karar vermiştim.

Benzer bir işi şu şekilde yaptım;
Bootloader kodunu yükledim, sonra ana kodumu chip içine yükledim. Daha sonra chip içindeki kodumuzu programlayıcı ile okuduğumuzda iki kod birleşmiş oluyor zaten dışarıya hex olarak alıp işi bitirebiliyoruz.
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: aliveli - 24 Ocak 2016, 16:35:43
@nusi
On-Off Kontrol programı motorları test etmek, bağlantı kontrolü vs  için
PWM programı çizgi izleyen robotun programı
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: nusi - 24 Ocak 2016, 20:10:02
teşekkür ederim arkadaşlar.

mesaj birleştirme:: 24 Ocak 2016, 20:10:15

Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: dnacikaya - 12 Nisan 2020, 22:41:56
Aynı işlemcide çalışan 2 projeyi birleştirmek için bir çalışma başlattım ama 2 projenin inc dosyaları nedeniyle projeleri birleştiremedim. Sonra hex dosyaları birleştirebilir miyim diye düşünüp forumda araştırma yapınca bu yazılanlarla karşılaştım okudum, kafamda şimşekler çaktı :-) Kaynak kodun birinde ve hex dosyası üzerinde çalışarak 2 hexsi aynı işlemcide çalıştırmayı başardım. Proton basic üzerinde pic18f4550 ile çalıştım ama farklı diller, derleyiciler veya işlemciler için kullanılabileceğini düşünüyorum. Artık pic18f4550 üzerinde usb cdc çalışma veya usb hid çalışma bir jumper yardımıyla seçilebiliyor. Çalışmayı pdf haline dönüştürdüm linkten indirilebilir:

https://www.elektroinfo.org/2020/04/pic-iki-hex-yuklemek-birlestirmek.html  (https://www.elektroinfo.org/2020/04/pic-iki-hex-yuklemek-birlestirmek.html)
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: power20 - 12 Nisan 2020, 23:01:04
10sn önce denedim. Bahsettiğiniz pdf indirilmiyor
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: dnacikaya - 12 Nisan 2020, 23:13:24
Alıntı yapılan: Kılıç - 12 Nisan 2020, 23:01:0410sn önce denedim. Bahsettiğiniz pdf indirilmiyor

Dosya paylaşımı drive herkese web açık şeklinde tekrar dener misiniz, bir de alternatif mediafire indirme linki ekledim.

https://www.elektroinfo.org/2020/04/pic-iki-hex-yuklemek-birlestirmek.html (https://www.elektroinfo.org/2020/04/pic-iki-hex-yuklemek-birlestirmek.html)
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: ts - 15 Nisan 2020, 11:47:11
@dnacikaya hocam elinize, yüreğinize sağlık benimde 2 hex çalıştırmak istediğim bir projem vardı pdften yola çıkıp hallederim artık teşekkürler.
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: OG - 06 Aralık 2020, 23:50:53
Alıntı yapılan: dnacikaya - 12 Nisan 2020, 22:41:56Aynı işlemcide çalışan 2 projeyi birleştirmek için bir çalışma başlattım ama 2 projenin inc dosyaları nedeniyle projeleri birleştiremedim. Sonra hex dosyaları birleştirebilir miyim diye düşünüp forumda araştırma yapınca bu yazılanlarla karşılaştım okudum, kafamda şimşekler çaktı :-) Kaynak kodun birinde ve hex dosyası üzerinde çalışarak 2 hexsi aynı işlemcide çalıştırmayı başardım. Proton basic üzerinde pic18f4550 ile çalıştım ama farklı diller, derleyiciler veya işlemciler için kullanılabileceğini düşünüyorum. Artık pic18f4550 üzerinde usb cdc çalışma veya usb hid çalışma bir jumper yardımıyla seçilebiliyor. Çalışmayı pdf haline dönüştürdüm linkten indirilebilir:

https://www.elektroinfo.org/2020/04/pic-iki-hex-yuklemek-birlestirmek.html  (https://www.elektroinfo.org/2020/04/pic-iki-hex-yuklemek-birlestirmek.html)
@dnacikaya
bu yöntemde herhangi bir sıkıntı yaşandı mı
belki bir iş için sorun çıkmamıştır ancak farklı uygulamalarda deneyince, belki.
sormak istedim çünkü başka forumlarda itirazlar gelmiş
http://www.protonbasic.co.uk/showthread.php/78825-Creating-hybrid-hex-for-PIC-microcontroller?p=520046&viewfull=1#post520046
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: dnacikaya - 07 Aralık 2020, 00:05:26
@OG İlk denememi pic18f4550 ile yaptım usb hid cdc seçimi sorunsuz çalışıyor ve bir sorunla karşılaşmadım. Ancak daha sonra pic18f14k50 ile 2. hex çalışmama durumu oldu ve onuda pdf'in sonunda açıkladım, hex son adresini FFFF yaptığımda sorun ortadan kalktı. Pickit3 ile ilgili hexin son adresini bulup FFFF leyip tekrar yüklemek sorunu çözdü.

https://drive.google.com/file/d/1S0FvISBi0Gt2HpLMosQYZPhJMapjyy87/view (https://drive.google.com/file/d/1S0FvISBi0Gt2HpLMosQYZPhJMapjyy87/view)

Bootloader alanını kullanmak istemedim hex yüklemek için birde 3. hex olarak bootloader kodunu birleştirmeyi düşünüyordum ancak fırsat bulamadım yoğunluktan. Kafamdaki sistem şuydu ama yarım kaldı bootloaderhex+hex1+hex2
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: OG - 07 Aralık 2020, 00:11:10
Alıntı YapAncak daha sonra pic18f14k50 ile 2. hex çalışmama durumu oldu ve onuda pdf'in sonunda açıkladım, hex son adresini 0000 yaptığımda sorun ortadan kalktı. Pickit3 ile ilgili hexin son adresini bulup sıfırlayıp tekrar yüklemek sorunu çözdü.
evet, sitende o bilgiyi görmüştüm.

Bu işlemleri deneyecek (usb için temel işlemler içerikli) .bas dosyası paylaşma imkanın var mıdır?
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: dnacikaya - 07 Aralık 2020, 00:21:16
Aşağıya ekliyorum proton 3255 versiyonu ile denedim yeni versiyonlarda kodlarda düzenlemeler gerekebilir.

usb cdc:

'Proton 3255 versiyonu ile stabil çalışır.
'cdcdesc.inc drive linkinde https://drive.google.com/file/d/1FZtEziQmVX2m08_w8uypoLNgRKWP7zWH/view?usp=sharing
Device = 18F4550
Declare Xtal = 48
Declare PROTON_START_ADDRESS = $2500
Declare Optimiser_Level = 3
Declare Reminders = Off
Declare USB_Descriptor = "CDCdesc.Inc"
Dim PP0 As Byte System
Dim Var1 As Word
Dim Var2 As Word
Dim Array1[20] As Byte
Dim Out_Buffer As String * 20
Dim In_Buffer As String * 20
Dim giris As Byte
Dim deger As Byte
Dim TX_Address  As String * 2   ' Used to hold first two strings of USB transmition
Symbol Carry_Flag = STATUS.0
Symbol TRNIF = UIR.3
TRISA=0
TRISB=0
TRISC=0
TRISD=0
PORTA=0
PORTB=0
PORTC=0
PORTD=0
All_Digital = True

Repeat
USBPoll
Until PP0 = %00000110

baslat:
Repeat
USBIn 3, In_Buffer, Auto
Until Carry_Flag = 0
DelayMS 1
USBPoll

giris= Val (In_Buffer,Dec)
Clear In_Buffer
Select Case giris

Case 1
PORTB.0=1
USBPoll
Clear In_Buffer

Case 2
PORTB.1=1
USBPoll
Clear In_Buffer


Case 3
PORTB.2=1
USBPoll
Clear In_Buffer


Case 4
PORTB.3=1
USBPoll
Clear In_Buffer


Case 5
PORTB.4=1
USBPoll
Clear In_Buffer


Case 6
PORTB.5=1
USBPoll
Clear In_Buffer


Case 7
PORTB.6=1
USBPoll
Clear In_Buffer


Case 8
PORTB.7=1
USBPoll
Clear In_Buffer


Case 9
PORTD.0=1
USBPoll
Clear In_Buffer


Case 10
PORTD.1=1
USBPoll
Clear In_Buffer


Case 11
PORTD.2=1
USBPoll
Clear In_Buffer


Case 12
PORTD.3=1
USBPoll
Clear In_Buffer


Case 13
PORTD.4=1
USBPoll
Clear In_Buffer


Case 14
PORTD.5=1
USBPoll
Clear In_Buffer


Case 15
PORTD.6=1
USBPoll
Clear In_Buffer


Case 16
PORTD.7=1
USBPoll
Clear In_Buffer



Case 17
PORTB.0=0
USBPoll
Clear In_Buffer


Case 18
PORTB.1=0
USBPoll
Clear In_Buffer


Case 19
PORTB.2=0
USBPoll
Clear In_Buffer


Case 20
PORTB.3=0
USBPoll
Clear In_Buffer


Case 21
PORTB.4=0
USBPoll
Clear In_Buffer


Case 22
PORTB.5=0
USBPoll
Clear In_Buffer


Case 23
PORTB.6=0
USBPoll
Clear In_Buffer


Case 24
PORTB.7=0
USBPoll
Clear In_Buffer


Case 25
PORTD.0=0
USBPoll
Clear In_Buffer


Case 26
PORTD.1=0
USBPoll
Clear In_Buffer


Case 27
PORTD.2=0
USBPoll
Clear In_Buffer


Case 28
PORTD.3=0
USBPoll
Clear In_Buffer


Case 29
PORTD.4=0
USBPoll
Clear In_Buffer


Case 30
PORTD.5=0
USBPoll
Clear In_Buffer


Case 31
PORTD.6=0
USBPoll
Clear In_Buffer


Case 32
PORTD.7=0
USBPoll
Clear In_Buffer


Case 254
PORTB=0
PORTD=0
USBPoll
Clear In_Buffer


Case 255
PORTB=255
PORTD=255
USBPoll
Clear In_Buffer
GoSub sender
End Select

sender:     
        Repeat
        USBOut 3, TEXT_STRING, 19 ' Poll the USB and Transmit only 12 characters of the buffer from endpoint 3
        Until Carry_Flag = 0 ' Keep trying if the microcontroller does not have control over the buffer
        Repeat : Until TRNIF = 1 ' Wait for completion before transmitting anything else
       
        Var1=PORTB
       __USBOut_Buffer = "\n\r1-8 = " + Str$(Dec,Var1) + "\n\r"
' Transmit from the USB's internal TX buffer String. NULL terminated.
Repeat
USBOut 3, __USBOut_Buffer, Auto  ' Poll the USB and Transmit the buffer from endpoint 3
        Until Carry_Flag = 0 ' Keep trying if the microcontroller does not have control over the buffer
        Repeat : Until TRNIF = 1 ' Wait for completion before transmitting anything else
        Inc Var1
' Go wait for the next buffer input
TEXT_STRING: CData "1-8 RELAYS STATE:   BUFFER\n\r",0

        Repeat
        USBOut 3, TEXT_STRING1, 19 ' Poll the USB and Transmit only 12 characters of the buffer from endpoint 3
        Until Carry_Flag = 0 ' Keep trying if the microcontroller does not have control over the buffer
        Repeat : Until TRNIF = 1 ' Wait for completion before transmitting anything else
       
        Var2=PORTD
       __USBOut_Buffer = "\n\r9-16 = " + Str$(Dec,Var2) + "\n\r"
' Transmit from the USB's internal TX buffer String. NULL terminated.
Repeat
USBOut 3, __USBOut_Buffer, Auto  ' Poll the USB and Transmit the buffer from endpoint 3
        Until Carry_Flag = 0 ' Keep trying if the microcontroller does not have control over the buffer
        Repeat : Until TRNIF = 1 ' Wait for completion before transmitting anything else
        Inc Var2
' Go wait for the next buffer input
TEXT_STRING1: CData "9-16 RELAYS STATE:   BUFFER\n\r",0

GoTo baslat
End


usb hid:

'Proton 3255 versiyonu ile stabil çalışır.
'usb hid inc dosyası: https://drive.google.com/file/d/1eFTufIuJYq3nhVWCjV24b3G_OBm0C32E/view?usp=sharing
Device = 18F4550
Xtal = 48
Declare PROTON_START_ADDRESS = $1000
Declare Optimiser_Level = 3
Declare Reminders = Off
PortB_Pullups = TRUE
Adin_Res 8
Adin_Stime 50 
USB_Descriptor = "usb6rolekontDESC.inc" 'INC uzantılı tanımlama dosyasını \inc\usb_18 klasörüne kopyalayınız.
' Buffer Haritası
' Buffer[0] = AN2 , Buffer[1] = AN3 , Buffer[2] = PORTB , Buffer[3] = PORTD
Symbol USBBufferSizeMax = 8
Symbol USBBufferSizeTX  = 8
Symbol USBBufferSizeRX  = 8
Dim    USBBuffer[USBBufferSizeMax] As Byte

'Bazı yararlı bayraklar.
Dim PP0 As Byte System        'USBPOLL durum dönüşü.
Symbol CARRY_FLAG = STATUS.0  'Mikrodenetleyicinin tampon üzerinde kontrolü yoksa yüksek.
Symbol CONFIGURED_STATE = 6   'Usb takılı mı?
'symbol DETACHED_STATE = UIR.2
'Symbol DETACHED_STATE = UIR.3
'Symbol DETACHED_STATE =UIR.4
'Symbol DETACHED_STATE = UCON.1
'symbol DETACHED_STATE =ueir.2
'If DETACHED_STATE = 0 Then GoTo resetleme

    'SpikeRC2                  ' Hata Ayıkla - Çağırma'yı bir kapsamla izleyebilmem için kısa bir darbe oluşturun.
    'USBPoll                                         ' Keep the connection alive
    'If USB_tConnected = 0 Then            ' If we still have lost the connection
    '    OSSignalBinSem E_USBDetached   ' Sinyal Ayrıldı (P-RTOS olayı)
    '    OSStopCycTmr C_USBPoll            ' Hayatta kalma zamanlayıcısını durdur
    'EndIf

'Dim ALICI1 As Byte

'Ana program döngüsü. Unutmayın, USB'yi saklamanız gerekir.
'USBPoll, USBIn veya USBOut çağrısıyla canlı bağlantı.
'Her birkaç milisaniye kadar.                    *

All_Digital=true  ' porta.0 1-0 için kullan

TRISA = %00000000
TRISB = %00000000
TRISC = %00000010
TRISD = %00000000
PORTA=0
PORTB=0
PORTC=0
PORTD=0
UCFG.4 = 1 ' Pull up resistors connected to the data terminals are activated. (pic18f4550 datasheet page-166)
UCFG.2 = 1 ' 1 = Full-speed device: controls transceiver edge rates; requires input clock at 48 MHz (pic18f4550 datasheet page-166)
           ' 0 = Low-speed device: controls transceiver edge rates; requires input clock at 6 MHz (pic18f4550 datasheet page-166)
UIE.4 = 1 'boşta algılama kesmesi etkin
UIE.2 = 1 'veriyolu etkinliği kesmesi etkin
UEIE = 1 'veriyolu zaman aşımı etkin
PIE2.4 = 1
UIR.2 = 0
UIR.4 = 0
UEIR.4 =0
PIR2.4 =0

' ************************************************************
DelayMS 200
If PORTC.1=1 Then GoTo usbcdc

GoSub AttachToUSB

ProgramLoop:
USBBuffer[2] = PORTB
USBBuffer[3] = PORTD

Call (Check@BusStatus)
Call (Driver@Service)
If UIR.4 = 1 Or UEIR.4 = 1 Or PIR2.4 = 1 Or UIR.2 = 1 Or UIR.0 = 1 Then Reset

   USBOut 1, USBBuffer, USBBufferSizeTX

 
   USBIn 1, USBBuffer, USBBufferSizeRX, ProgramLoop   
Call (Check@BusStatus)
Call (Driver@Service)
'If UIR.4 = 1 Or UEIR.4 = 1 Or PIR2.4 = 1 Then reset
'    SerIn PORTA.1,813,[Wait ($80) ,ALICI1]
   
   If USBBuffer[3] = 1 Then PORTB.0=1
   If USBBuffer[3] = 2 Then PORTB.1=1
   If USBBuffer[3] = 3 Then PORTB.2=1
   If USBBuffer[3] = 4 Then PORTB.3=1
   If USBBuffer[3] = 5 Then PORTB.4=1
   If USBBuffer[3] = 6 Then PORTB.5=1
   If USBBuffer[3] = 7 Then PORTB.6=1
   If USBBuffer[3] = 8 Then PORTB.7=1

   If USBBuffer[3] = 17 Then PORTB.0=0
   If USBBuffer[3] = 18 Then PORTB.1=0
   If USBBuffer[3] = 19 Then PORTB.2=0
   If USBBuffer[3] = 20 Then PORTB.3=0
   If USBBuffer[3] = 21 Then PORTB.4=0
   If USBBuffer[3] = 22 Then PORTB.5=0
   If USBBuffer[3] = 23 Then PORTB.6=0
   If USBBuffer[3] = 24 Then PORTB.7=0

   If USBBuffer[3] = 9 Then PORTD.0=1
   If USBBuffer[3] = 10 Then PORTD.1=1
   If USBBuffer[3] = 11 Then PORTD.2=1
   If USBBuffer[3] = 12 Then PORTD.3=1
   If USBBuffer[3] = 13 Then PORTD.4=1
   If USBBuffer[3] = 14 Then PORTD.5=1
   If USBBuffer[3] = 15 Then PORTD.6=1
   If USBBuffer[3] = 16 Then PORTD.7=1

   If USBBuffer[3] = 25 Then PORTD.0=0
   If USBBuffer[3] = 26 Then PORTD.1=0
   If USBBuffer[3] = 27 Then PORTD.2=0
   If USBBuffer[3] = 28 Then PORTD.3=0
   If USBBuffer[3] = 29 Then PORTD.4=0
   If USBBuffer[3] = 30 Then PORTD.5=0
   If USBBuffer[3] = 31 Then PORTD.6=0
   If USBBuffer[3] = 32 Then PORTD.7=0

   If USBBuffer[3] = 254 Then PORTB=0
   If USBBuffer[3] = 254 Then PORTD=0   
   If USBBuffer[3] = 255 Then PORTB=255
   If USBBuffer[3] = 255 Then PORTD=255
   
'UCON.2=1 'pcye bağlanma sinyali gönderir.
'DelayMS 2
'UCON.2=0               
Call (Check@BusStatus)
Call (Driver@Service)
   GoTo ProgramLoop
 
' ************************************************************
' * USB veri yolundan Veri Alın.                             *
' ************************************************************
'DoUSBIn:
'   USBIn 1, USBBuffer, USBBufferSizeRX, DoUSBIn
'Return
   
' ************************************************************
' * Veri Aktarımı.                                           *
' ************************************************************
'DoUSBOut:   
'   USBOut 1, USBBuffer, USBBufferSizeTX, DoUSBOut
'   Return

' ************************************************************
' * İlave etmek için USB arabirimini bekleyin.
' ************************************************************
AttachToUSB:
If UIR.4 = 1 Or UEIR.4 = 1 Or PIR2.4 = 1 Or UIR.2 = 1 Or UIR.0 = 1 Then Reset
Repeat
USBPoll
Until PP0 = CONFIGURED_STATE
Return
usbcdc:



Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: M.Salim GÜLLÜCE - 07 Aralık 2020, 00:58:20
Anlamadığım Call ve Jump adresleri nasıl rölatif hale geliyor.
Başka bir adrese yerleştirildiğinde bu adreslerin yeniden inşa edilmesi gerekmiyormu.
Kaynak kod uzerinde olsa anlarım ama hex üzerinde nasıl gerçekleştiriliyor bu işlem.
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: dnacikaya - 07 Aralık 2020, 01:06:16
Alıntı yapılan: Mehmet Salim GÜLLÜCE - 07 Aralık 2020, 00:58:20Anlamadığım Call ve Jump adresleri nasıl rölatif hale geliyor.
Başka bir adrese yerleştirildiğinde bu adreslerin yeniden inşa edilmesi gerekmiyormu.
Kaynak kod uzerinde olsa anlarım ama hex üzerinde nasıl gerçekleştiriliyor bu işlem.
Hocam verdiğim kodlarda proton start adresleri farklı ve bu fark nedeniyle sorun olmuyor. Oluşan 1.hex için bütün adresler 1000 değerine göre belirleniyor. 2. hex ise 2500 adres başlangıcına göre. Bu işlemi öylesine denedim ve olduğunda bende çok şaşırmıştım :-) Sistem resetlenince uygun şartlarda gitmesi gereken hexe yönlendiriliyor. Usb hid  kodun sonuna bakarsanız usbcdc: etiketiyle sonlandırılıdı kod. Buradan sonra cdc hex devreye giriyor.
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: RaMu - 07 Aralık 2020, 01:06:32
1. Program için
Declare PROTON_START_ADDRESS = $10002. Program için
Declare PROTON_START_ADDRESS = $2500yazıyor ve 1. programın $1000 ile $2500 arasına sığacağını,
2. programın $2500 ile program hafızası sonuna sığacağını
sağlamış olarak veya varsayarak programı yazıyor.

Programı yazarken başlangıç adresi verildiği için sonraki etiketler
bu adresten itibaren derleyici tarafından denk geldikleri satırlara atanıyor.

Bu sistemde
mesela iki kodunda sonunda ortak bir alan belirleyip
o alana ortak bir alt program yazılarak
iki main programında bu ortak altprogramı kullanması sağlanabilir.

....
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: RaMu - 07 Aralık 2020, 01:10:55
Aslında bunun için "absolute code, relocatable code" işi var,
asm için şu şekilde ama protonda nasıldır varmıdır bilemiyorum:
https://www.picproje.org/index.php/topic,43302.msg328290.html#msg328290
https://rmtulay.wordpress.com/2015/05/21/asm-relocatable-kod-olusturup-absolute-kod-ile-kullanma/
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: M.Salim GÜLLÜCE - 07 Aralık 2020, 01:16:38
Alıntı yapılan: RaMu - 07 Aralık 2020, 01:10:55Aslında bunun için "absolute code, relocatable code" işi var,
asm için şu şekilde ama protonda nasıldır varmıdır bilemiyorum:
https://www.picproje.org/index.php/topic,43302.msg328290.html#msg328290
https://rmtulay.wordpress.com/2015/05/21/asm-relocatable-kod-olusturup-absolute-kod-ile-kullanma/
Derlenmiş bir hex'i başka adrese yüklemek eğer uzak (adrese dayalı) çağrıları gerektiriyorsa mutlaka sıkıntı çıkarır diye bilirim.

Basic yönlendirmenin adresten bağımsız kod oluşturduğunu sanmam.
Muhtemelen derlenmiş hexler uzak çağrı içermediği için çalışmış olduğunu düşünürüm.
Kaynak kod olsa ikisini kaynağından birleştirmek tabiiki mümkün.
Ancak kaynak olmayınca ııhhh..!!
aklıma yatmıyor.
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: RaMu - 07 Aralık 2020, 01:23:19
Alıntı yapılan: Mehmet Salim GÜLLÜCE - 07 Aralık 2020, 01:16:38Derlenmiş bir hex'i başka adrese yüklemek eğer uzak (adrese dayalı) çağrıları gerektiriyorsa mutlaka sıkıntı çıkarır diye bilirim.
...
aklıma yatmıyor.
Genel olarak düşününce evet sıkıntılı.
Bunun için verdiğim örnekte
PAGESEL TOPLA_RELO
CALL TOPLA_RELO
uzak adres çağırma ihtimaline karşı önlem var.

Alıntı yapılan: Mehmet Salim GÜLLÜCE - 07 Aralık 2020, 01:16:38...
Basic yönlendirmenin adresten bağımsız kod oluşturduğunu sanmam.
...
Adresten bağımsız değil, gerekli adresleri atıyor zaten @dnacikaya nin yöntemi,
daha 2. kodu derlerken, derleyiciye ben bu kodu 2500 den itibaren yazıyorum,
nereye hangi etikete ne adres atayacaksan ona göre ata diyor.

Alıntı yapılan: Mehmet Salim GÜLLÜCE - 07 Aralık 2020, 01:16:38...
aklıma yatmıyor.
Bencede iyi bir yöntem değil.
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: power20 - 07 Aralık 2020, 10:28:10
İki kodu da kendiniz yazıyorsanız sorunlar giderilebilir gibi
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: M.Salim GÜLLÜCE - 07 Aralık 2020, 14:02:34
Alıntı yapılan: Kılıç - 07 Aralık 2020, 10:28:10İki kodu da kendiniz yazıyorsanız sorunlar giderilebilir gibi
İki koduda kendiniz yazıyorsanız zaten tek seferde derler ve bir hex oluşturursunuz.
Mesele hafızadan bağımsız adreslenmemiş taşınabilir kod yazabilmek.
Başlık: Ynt: pic e iki farklı hex kodu yükleme
Gönderen: RaMu - 07 Aralık 2020, 18:27:33
Alıntı yapılan: Mehmet Salim GÜLLÜCE - 07 Aralık 2020, 14:02:34...
Mesele hafızadan bağımsız adreslenmemiş taşınabilir kod yazabilmek.
Oda yazılır ama işletim sistemi ve exe mantığına döner,
bizim mcu işleri için çok tercih edilecek bir iş olmaz.
Mcu ya bootloader yazar gibi bir işletim sistemi baştan yüklenir.
Sonra yüklenecek exe diyeceğimiz kodları bu o.s. açar, yorumlar, adres atlamalarını bulur
kodu mcu da yükleyeceği yere göre uyarlar,
bu şekilde 2. 3. ... kodu mcuya yükler.
Uğraşmaya değer bir iş gibi değil.
Zaten bootloader alternatifi varken.