Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => KEIL => Konuyu başlatan: z - 19 Mayıs 2015, 07:03:51

Başlık: Keil'de derleme öncesi özel programları çalıştırmak
Gönderen: z - 19 Mayıs 2015, 07:03:51
Keilde derleme işlemini başlattığımda yazdığım bir exe program çalışıyor ve adı sanı sabit olan bazı dosyalar üzerinde ön işlem yapıyordu.

Yeni bir exe daha yazdım. Bunu da derleme aşamasında çalıştırmak istiyorum. Ancak bu program projede  include direktifi kullanılarak yazılmış ve ne kadar include edilmiş dosya varsa hepsi için tek tek çalışmalı.

Ancak bunu bir türlü  beceremedim.

Target for option da user segues altında run#1 run#2 gibi bölümler var. Buraya işletilmesini istediğimiz exe programın adını yazmamız yeterli.
Ancak her bir dosya için ne yapacağımı anlayamadım.


Başlık: Ynt: Keil'de derleme öncesi özel programları çalıştırmak
Gönderen: Tagli - 19 Mayıs 2015, 08:31:40
Hocam yazdığın program proje klasöründeki kaynak dosyalarını tarayıp #include edilen kaynak dosyalarını bulabilir belki. Hedef dosyalar listesi bir kez belirlendikten sonra, yapması gereken işlemi hepsi üzerinde yapar.

Projeye #include ile eklenmiş dosyaların listesi bir ihtimalle Keil'in kendi proje dosyası içinde de saklanıyor olabilir. Çünkü genelde IDE'ler projeye ekli dosyaların bir listesini tutarlar.
Başlık: Ynt: Keil'de derleme öncesi özel programları çalıştırmak
Gönderen: Gökhan BEKEN - 19 Mayıs 2015, 08:33:25
Program çalaştığında, gider projenin path'indeki bütün dosyaları listeleyerek bir diziye path'lerini atar.
Dizideki bu dosya adreslerini sırayla açar,
varsa "include" geçen yerleri bulur,
include'nin yanındaki tırnakların arasında bulunan adreslerdeki dosyaları okur,
bu okuduğu adresteki dosyayı ekrana mı yazacak, ne yapacaksa işini görür ve mutlu son.

(Tagli benden hızlı davranmış)
Başlık: Ynt: Keil'de derleme öncesi özel programları çalıştırmak
Gönderen: z - 19 Mayıs 2015, 08:44:52
Keil'in dosya sayısı kez programımı çalıştırmasını nasıl ayarlarıma takılıp alternatif çözümleri hiç düşünmemiştim.

Proje klasöründeki dosyalara tek tek baktığımda .d uzantılı olanın içinde tüm dosyaların yazılı olduğunu gördüm.

Bu durumda işim çok kolaylaştı.
Başlık: Ynt: Keil'de derleme öncesi özel programları çalıştırmak
Gönderen: Tagli - 19 Mayıs 2015, 10:10:32
.d uzantili dosyalar derleyici tarafindan uretiliyor ve yanilmiyorsam bu dosyalarin olusabilmesi icin en az bir kez derlenmesi lazim projenin. Bu .d dosyalari make tarafindan kullaniliyor ve .c, .cpp gibi kaynak dosyalarinin header bagimliliklarini listeliyor. Eger kaynak dosyalarin header bagimlikliklari degisirse make bu durumu .d dosyalarina bakarak algiliyor ve ilgili kisimlari tekrardan derliyor. Bu dosyalar olmasaydi, mesela lib.c dosyasinin include ettigi lib.h degisirse make bunu algilayamaz ve lib.c'yi tekrardan derlemezdi.
Başlık: Ynt: Keil'de derleme öncesi özel programları çalıştırmak
Gönderen: z - 19 Mayıs 2015, 10:45:26
Sen bunları nereden biliyorsun?
Başlık: Ynt: Keil'de derleme öncesi özel programları çalıştırmak
Gönderen: Tagli - 19 Mayıs 2015, 11:03:23
Zamanında elle Makefile yazmam gerekmişti ve epey araştırmıştım. Bu .d dosyaları ile o şekilde tanıştım.

Elbette özünde Make bir Unix yazılımı ama anladığım kadarıyla Unix haricinde de kullanılıyor ve hemen hemen tüm IDE'ler derleme işlemini bununla yapıyor. Elbette kullandıkları asıl yazılım GNU Make değil de bunun muadili olan bir program olabilir ama mantık aynı. Make sayesinde pek çok dosyadan oluşan bir proje derlenirken, sadece bir önceki derlemeden sonra değişmiş olan kaynak dosyaları tekrardan derlenerek zamandan tasarruf ediliyor.

Header bağımlılıklarının Makefile'da gösterilmesi ile ilgili bir doküman: http://scottmcpeak.com/autodepend/autodepend.html (http://scottmcpeak.com/autodepend/autodepend.html)
Elbette burada yazdığı kadar ayrıntısına gitmemiştim işin. Bağlantısını verdiğim yazıda "An Improvement" yazan kısma ve ötesine gitmedim.

IDE'ler gerekli Makefile'ları kendileri otomatik oluşturduğu için genelde pek elle yazılmıyorlar. Ayrıca, Unix ortamı için farklı durumlarda farklı Makefile'lar oluşturmaktan ve bütün bu işi GNU standartlarına da uyarak yapmanın zorluğundan bıkan birileri 1990'lı yılların başlarında Automake isimli otomatik Makefile üreten bir yazılım geliştirmiş. Automake bu konudaki tek yazılım değil elbette.
Başlık: Ynt: Keil'de derleme öncesi özel programları çalıştırmak
Gönderen: Burak B - 19 Mayıs 2015, 11:17:03
Normalde bunları makefile dosyasını işleyerek yapabilirdiniz ancak malesef keil makefile üretmiyor. Ancak batch file üretiyor. Onunla kendinize bir çözüm üretebilirseniz proje ayarlarından "Output" sekmesine bir bakın. Yada kendiniz bir makefile yazacaksınız. Bu konu yazılan modüllerin sürüm kontrollerinin otomatikleştirilmesi için elzem konulardan biridir.
Başlık: Ynt: Keil'de derleme öncesi özel programları çalıştırmak
Gönderen: Farukc - 19 Mayıs 2015, 18:19:58
Makefile kullanacaksanız Keil ile kullanamazsınız.  Derleyiciyide değiştirmenizi tavsiye ederim. GNU derleyicisi kullanırsanız dökümanlara daha rahat ulaşabilirsiniz.
Başlık: Ynt: Keil'de derleme öncesi özel programları çalıştırmak
Gönderen: Gökhan BEKEN - 19 Mayıs 2015, 18:40:02
Proje dosyasında da kullanılan dosyalar yazıyor.

Mesela:

            <VariousControls>
              <MiscControls>--C99</MiscControls>
              <Define>USE_HAL_DRIVER,STM32F429xx,USE_STDPERIPH_DRIVER,STM32F429_439xx,USE_STM324x9I_EVAL</Define>
              <Undefine></Undefine>
              <IncludePath>..\Inc;..\Drivers\STM32F4xx_HAL_Driver\Inc;..\Drivers\STM32F4xx_HAL_Driver\Inc\Legacy;..\Middlewares\ST\STM32_USB_Host_Library\Core\Inc;..\Middlewares\ST\STM32_USB_Host_Library\Class\AUDIO\Inc;..\Drivers\CMSIS\Include;..\Drivers\CMSIS\Device\ST\STM32F4xx\Include;..\Libraries\CMSIS\Device\ST\STM32F4xx\Include;..\Libraries\STM32F4xx_StdPeriph_Driver\inc;..\Utilities\STM32_EVAL\Common;..\Utilities\STM32_EVAL\STM324x9I_EVAL;..\Libraries\CMSIS\Include;..\Src</IncludePath>
            </VariousControls>


Mesela:

        <Group>
          <GroupName>Middlewares/USB_Host_Library</GroupName>
          <Files>
            <File>
              <FileName>usbh_pipes.c</FileName>
              <FileType>1</FileType>
              <FilePath>..\Middlewares\ST\STM32_USB_Host_Library\Core\Src\usbh_pipes.c</FilePath>
            </File>
            <File>
              <FileName>usbh_core.c</FileName>
              <FileType>1</FileType>
              <FilePath>..\Middlewares\ST\STM32_USB_Host_Library\Core\Src\usbh_core.c</FilePath>
            </File>
            <File>
              <FileName>usbh_audio.c</FileName>
              <FileType>1</FileType>
              <FilePath>..\Middlewares\ST\STM32_USB_Host_Library\Class\AUDIO\Src\usbh_audio.c</FilePath>
            </File>
            <File>
              <FileName>usbh_ioreq.c</FileName>
              <FileType>1</FileType>
              <FilePath>..\Middlewares\ST\STM32_USB_Host_Library\Core\Src\usbh_ioreq.c</FilePath>
            </File>
            <File>
              <FileName>usbh_ctlreq.c</FileName>
              <FileType>1</FileType>
              <FilePath>..\Middlewares\ST\STM32_USB_Host_Library\Core\Src\usbh_ctlreq.c</FilePath>
            </File>
          </Files>
        </Group>
Başlık: Ynt: Keil'de derleme öncesi özel programları çalıştırmak
Gönderen: Farukc - 19 Mayıs 2015, 19:12:39
Uğraşırsanız proje dosyasını makefile çeviren bir program yazabilirsiniz. Zaten proje dosyası xml türünde.