Struct Yapısı hakkında

Başlatan Mucit23, 12 Eylül 2017, 13:48:55

Mucit23

Selamlar

Font kullanımında Struct yapısını projemde oturtmaya çalışıyorum.

Font Dönüşümü için @HexfeT  hocamın önerdiği TheDotFactory yazılımını kullanıyorum. Bu yazılım bana en uygun çıktıyı veriyor. Fakat kullanım işini henüz tam oturtturamadım bazı anlamadıklarım var.

Öncelikle Font ile ilgili bütün bilgileri tek bir Struct altında toplamak istiyorum. Bunun için programın verdiği çıktıya göre aşağıdaki gibi bir yapı oluşturdum.

typedef struct 
{
   const uint8_t Height;
	 const char StartChar;
	 const char EndChar;
	 const uint16_t *FontDescriptor;
	 const uint8_t *FontBitmap;
} tFONT;


Dönüştürdüğüm font dosyasında iki adet dizi var. Birinde font dataları bulunurken diğer dizide Font hakkında başlangıç adresleri ve karater genişlikleri tutuluyor.

Örneğin aşağıdaki dizide font dataları var.
/* Character bitmaps for Tahoma 20pt */
const uint8_t tahoma_20ptBitmaps[] = 
{
	/* @0 ' ' (5 pixels wide) */
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      
	0x00, //      

	/* @27 '!' (3 pixels wide) */
	0x00, //    
	0x00, //    
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0x00, //    
	0x00, //    
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    

	/* @54 '"' (8 pixels wide) */
	0x00, //         
	0xE7, // ###  ###
	0xE7, // ###  ###
	0xE7, // ###  ###
	0xE7, // ###  ###
	0xE7, // ###  ###
	0xE7, // ###  ###
	0xE7, // ###  ###
	0x42, //  #    # 
	0x00, //         
	0x00, //         
	0x00, //         
	0x00, //         
	0x00, //         
	0x00, //         
	0x00, //         
	0x00, //         
	0x00, //         
	0x00, //         
	0x00, //         
	0x00, //         
	0x00, //         
	0x00, //         
	0x00, //         
	0x00, //         
	0x00, //         
	0x00, //         

	/* @81 '#' (16 pixels wide) */
	0x00, 0x00, //                 
	0x00, 0x00, //                 
	0x01, 0x8C, //        ##   ##  
	0x01, 0x8C, //        ##   ##  
	0x03, 0x18, //       ##   ##   
	0x03, 0x18, //       ##   ##   
	0x03, 0x18, //       ##   ##   
	0x03, 0x18, //       ##   ##   
	0x3F, 0xFF, //   ##############
	0x3F, 0xFF, //   ##############
	0x06, 0x30, //      ##   ##    
	0x06, 0x30, //      ##   ##    
	0x0C, 0x60, //     ##   ##     
	0x0C, 0x60, //     ##   ##     
	0x0C, 0x60, //     ##   ##     
	0xFF, 0xFC, // ##############  
	0xFF, 0xFC, // ##############  
	0x18, 0xC0, //    ##   ##      
	0x18, 0xC0, //    ##   ##      
	0x18, 0xC0, //    ##   ##      
	0x31, 0x80, //   ##   ##       
	0x31, 0x80, //   ##   ##       
	0x00, 0x00, //                 
	0x00, 0x00, //                 
	0x00, 0x00, //                 
	0x00, 0x00, //                 
	0x00, 0x00, //                 

	/* @135 '$' (13 pixels wide) */
	0x00, 0x00, //              
	0x03, 0x00, //       ##     
	0x03, 0x00, //       ##     
	0x03, 0x00, //       ##     
	0x03, 0x00, //       ##     
	0x0F, 0xE0, //     #######  
	0x3F, 0xF0, //   ########## 
	0x73, 0x30, //  ###  ##  ## 
	0xE3, 0x10, // ###   ##   # 
	0xE3, 0x00, // ###   ##     
	0xE3, 0x00, // ###   ##     
	0xF3, 0x00, // ####  ##     
	0x7F, 0x00, //  #######     
	0x3F, 0xE0, //   #########  
	0x03, 0xF0, //       ###### 
	0x03, 0x78, //       ## ####
	0x03, 0x38, //       ##  ###
	0x03, 0x38, //       ##  ###
	0x83, 0x38, // #     ##  ###
	0xE3, 0x70, // ###   ## ### 
	0xFF, 0xE0, // ###########  
	0x3F, 0xC0, //   ########   
	0x03, 0x00, //       ##     
	0x03, 0x00, //       ##     
	0x03, 0x00, //       ##     
	0x03, 0x00, //       ##     
	0x03, 0x00, //       ##     

	/* @189 '%' (24 pixels wide) */
	0x00, 0x00, 0x00, //                         
	0x00, 0x00, 0x00, //                         
	0x3E, 0x00, 0xC0, //   #####         ##      
	0x7F, 0x01, 0x80, //  #######       ##       
	0x63, 0x01, 0x80, //  ##   ##       ##       
	0xC1, 0x83, 0x00, // ##     ##     ##        
	0xC1, 0x83, 0x00, // ##     ##     ##        
	0xC1, 0x86, 0x00, // ##     ##    ##         
	0xC1, 0x86, 0x00, // ##     ##    ##         
	0xC1, 0x8C, 0x00, // ##     ##   ##          
	0xC1, 0x8C, 0x7C, // ##     ##   ##   #####  
	0x63, 0x18, 0xFE, //  ##   ##   ##   ####### 
	0x7F, 0x18, 0xC6, //  #######   ##   ##   ## 
	0x3E, 0x31, 0x83, //   #####   ##   ##     ##
	0x00, 0x31, 0x83, //           ##   ##     ##
	0x00, 0x61, 0x83, //          ##    ##     ##
	0x00, 0x61, 0x83, //          ##    ##     ##
	0x00, 0xC1, 0x83, //         ##     ##     ##
	0x00, 0xC1, 0x83, //         ##     ##     ##
	0x01, 0x80, 0xC6, //        ##       ##   ## 
	0x01, 0x80, 0xFE, //        ##       ####### 
	0x03, 0x00, 0x7C, //       ##         #####  
	0x00, 0x00, 0x00, //                         
	0x00, 0x00, 0x00, //                         
	0x00, 0x00, 0x00, //                         
	0x00, 0x00, 0x00, //                         
	0x00, 0x00, 0x00, //                         

	/* @270 '&' (18 pixels wide) */
	0x00, 0x00, 0x00, //                   
	0x00, 0x00, 0x00, //                   
	0x0F, 0x80, 0x00, //     #####         
	0x3F, 0xC0, 0x00, //   ########        
	0x39, 0xE0, 0x00, //   ###  ####       
	0x70, 0xE0, 0x00, //  ###    ###       
	0x70, 0xE0, 0x00, //  ###    ###       
	0x70, 0xE0, 0x00, //  ###    ###       
	0x78, 0xC0, 0x00, //  ####   ##        
	0x3D, 0xC0, 0x00, //   #### ###        
	0x1F, 0x8E, 0x00, //    ######   ###   
	0x1F, 0x0E, 0x00, //    #####    ###   
	0x37, 0x8E, 0x00, //   ## ####   ###   
	0x73, 0xCE, 0x00, //  ###  ####  ###   
	0xE1, 0xEE, 0x00, // ###    #### ###   
	0xE0, 0xFC, 0x00, // ###     ######    
	0xE0, 0x7C, 0x00, // ###      #####    
	0xE0, 0x3C, 0x00, // ###       ####    
	0xF0, 0x3E, 0x00, // ####      #####   
	0x78, 0x7F, 0x00, //  ####    #######  
	0x3F, 0xE7, 0x80, //   #########  #### 
	0x1F, 0x83, 0xC0, //    ######     ####
	0x00, 0x00, 0x00, //                   
	0x00, 0x00, 0x00, //                   
	0x00, 0x00, 0x00, //                   
	0x00, 0x00, 0x00, //                   
	0x00, 0x00, 0x00, //                   

	/* @351 ''' (3 pixels wide) */
	0x00, //    
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0x40, //  # 
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    

	/* @378 '(' (8 pixels wide) */
	0x00, //         
	0x07, //      ###
	0x0E, //     ### 
	0x1C, //    ###  
	0x38, //   ###   
	0x38, //   ###   
	0x70, //  ###    
	0x70, //  ###    
	0x70, //  ###    
	0xF0, // ####    
	0xE0, // ###     
	0xE0, // ###     
	0xE0, // ###     
	0xE0, // ###     
	0xE0, // ###     
	0xE0, // ###     
	0xE0, // ###     
	0xE0, // ###     
	0xF0, // ####    
	0x70, //  ###    
	0x70, //  ###    
	0x70, //  ###    
	0x38, //   ###   
	0x38, //   ###   
	0x1C, //    ###  
	0x0E, //     ### 
	0x07, //      ###

	/* @405 ')' (8 pixels wide) */
	0x00, //         
	0xE0, // ###     
	0x70, //  ###    
	0x38, //   ###   
	0x1C, //    ###  
	0x1C, //    ###  
	0x0E, //     ### 
	0x0E, //     ### 
	0x0E, //     ### 
	0x0F, //     ####
	0x07, //      ###
	0x07, //      ###
	0x07, //      ###
	0x07, //      ###
	0x07, //      ###
	0x07, //      ###
	0x07, //      ###
	0x07, //      ###
	0x0F, //     ####
	0x0E, //     ### 
	0x0E, //     ### 
	0x0E, //     ### 
	0x1C, //    ###  
	0x1C, //    ###  
	0x38, //   ###   
	0x70, //  ###    
	0xE0, // ###     

	/* @432 '*' (12 pixels wide) */
	0x00, 0x00, //             
	0x06, 0x00, //      ##     
	0x06, 0x00, //      ##     
	0x46, 0x20, //  #   ##   # 
	0xE6, 0x70, // ###  ##  ###
	0x3F, 0xC0, //   ########  
	0x0F, 0x00, //     ####    
	0x0F, 0x00, //     ####    
	0x3F, 0xC0, //   ########  
	0xE6, 0x70, // ###  ##  ###
	0x46, 0x20, //  #   ##   # 
	0x06, 0x00, //      ##     
	0x06, 0x00, //      ##     
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             

	/* @486 '+' (16 pixels wide) */
	0x00, 0x00, //                 
	0x00, 0x00, //                 
	0x00, 0x00, //                 
	0x00, 0x00, //                 
	0x00, 0x00, //                 
	0x01, 0x80, //        ##       
	0x01, 0x80, //        ##       
	0x01, 0x80, //        ##       
	0x01, 0x80, //        ##       
	0x01, 0x80, //        ##       
	0x01, 0x80, //        ##       
	0x01, 0x80, //        ##       
	0xFF, 0xFF, // ################
	0xFF, 0xFF, // ################
	0x01, 0x80, //        ##       
	0x01, 0x80, //        ##       
	0x01, 0x80, //        ##       
	0x01, 0x80, //        ##       
	0x01, 0x80, //        ##       
	0x01, 0x80, //        ##       
	0x01, 0x80, //        ##       
	0x00, 0x00, //                 
	0x00, 0x00, //                 
	0x00, 0x00, //                 
	0x00, 0x00, //                 
	0x00, 0x00, //                 
	0x00, 0x00, //                 

	/* @540 ',' (6 pixels wide) */
	0x00, //       
	0x00, //       
	0x00, //       
	0x00, //       
	0x00, //       
	0x00, //       
	0x00, //       
	0x00, //       
	0x00, //       
	0x00, //       
	0x00, //       
	0x00, //       
	0x00, //       
	0x00, //       
	0x00, //       
	0x00, //       
	0x00, //       
	0x00, //       
	0x3C, //   ####
	0x38, //   ### 
	0x38, //   ### 
	0x30, //   ##  
	0x70, //  ###  
	0x70, //  ###  
	0x60, //  ##   
	0xE0, // ###   
	0xC0, // ##    

	/* @567 '-' (7 pixels wide) */
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0xFE, // #######
	0xFE, // #######
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        
	0x00, //        

	/* @594 '.' (3 pixels wide) */
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0xE0, // ###
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    

	/* @621 '/' (10 pixels wide) */
	0x00, 0x00, //           
	0x00, 0xC0, //         ##
	0x01, 0xC0, //        ###
	0x01, 0x80, //        ## 
	0x01, 0x80, //        ## 
	0x01, 0x80, //        ## 
	0x03, 0x00, //       ##  
	0x03, 0x00, //       ##  
	0x03, 0x00, //       ##  
	0x06, 0x00, //      ##   
	0x06, 0x00, //      ##   
	0x06, 0x00, //      ##   
	0x0C, 0x00, //     ##    
	0x0C, 0x00, //     ##    
	0x0C, 0x00, //     ##    
	0x18, 0x00, //    ##     
	0x18, 0x00, //    ##     
	0x18, 0x00, //    ##     
	0x30, 0x00, //   ##      
	0x30, 0x00, //   ##      
	0x30, 0x00, //   ##      
	0x60, 0x00, //  ##       
	0x60, 0x00, //  ##       
	0x60, 0x00, //  ##       
	0xE0, 0x00, // ###       
	0xC0, 0x00, // ##        
	0x00, 0x00, //           

	/* @675 '0' (13 pixels wide) */
	0x00, 0x00, //              
	0x00, 0x00, //              
	0x0F, 0x80, //     #####    
	0x3F, 0xE0, //   #########  
	0x38, 0xE0, //   ###   ###  
	0x70, 0x70, //  ###     ### 
	0x70, 0x70, //  ###     ### 
	0xE0, 0x38, // ###       ###
	0xE0, 0x38, // ###       ###
	0xE0, 0x38, // ###       ###
	0xE0, 0x38, // ###       ###
	0xE0, 0x38, // ###       ###
	0xE0, 0x38, // ###       ###
	0xE0, 0x38, // ###       ###
	0xE0, 0x38, // ###       ###
	0xE0, 0x38, // ###       ###
	0xE0, 0x38, // ###       ###
	0x70, 0x70, //  ###     ### 
	0x70, 0x70, //  ###     ### 
	0x38, 0xE0, //   ###   ###  
	0x3F, 0xE0, //   #########  
	0x0F, 0x80, //     #####    
	0x00, 0x00, //              
	0x00, 0x00, //              
	0x00, 0x00, //              
	0x00, 0x00, //              
	0x00, 0x00, //              

	/* @729 '1' (11 pixels wide) */
	0x00, 0x00, //            
	0x00, 0x00, //            
	0x06, 0x00, //      ##    
	0x0E, 0x00, //     ###    
	0x1E, 0x00, //    ####    
	0xFE, 0x00, // #######    
	0xFE, 0x00, // #######    
	0x0E, 0x00, //     ###    
	0x0E, 0x00, //     ###    
	0x0E, 0x00, //     ###    
	0x0E, 0x00, //     ###    
	0x0E, 0x00, //     ###    
	0x0E, 0x00, //     ###    
	0x0E, 0x00, //     ###    
	0x0E, 0x00, //     ###    
	0x0E, 0x00, //     ###    
	0x0E, 0x00, //     ###    
	0x0E, 0x00, //     ###    
	0x0E, 0x00, //     ###    
	0x0E, 0x00, //     ###    
	0xFF, 0xE0, // ###########
	0xFF, 0xE0, // ###########
	0x00, 0x00, //            
	0x00, 0x00, //            
	0x00, 0x00, //            
	0x00, 0x00, //            
	0x00, 0x00, //            

	/* @783 '2' (12 pixels wide) */
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x3F, 0x00, //   ######    
	0xFF, 0x80, // #########   
	0xE1, 0xC0, // ###    ###  
	0x80, 0xE0, // #       ### 
	0x00, 0xE0, //         ### 
	0x00, 0xE0, //         ### 
	0x00, 0xE0, //         ### 
	0x00, 0xE0, //         ### 
	0x01, 0xC0, //        ###  
	0x01, 0xC0, //        ###  
	0x03, 0x80, //       ###   
	0x07, 0x80, //      ####   
	0x0F, 0x00, //     ####    
	0x0E, 0x00, //     ###     
	0x1C, 0x00, //    ###      
	0x38, 0x00, //   ###       
	0x70, 0x00, //  ###        
	0xE0, 0x00, // ###         
	0xFF, 0xF0, // ############
	0xFF, 0xF0, // ############
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             

	/* @837 '3' (12 pixels wide) */
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x1F, 0x80, //    ######   
	0x7F, 0xE0, //  ########## 
	0x70, 0xF0, //  ###    ####
	0x40, 0x70, //  #       ###
	0x00, 0x70, //          ###
	0x00, 0x70, //          ###
	0x00, 0x70, //          ###
	0x01, 0xE0, //        #### 
	0x0F, 0x80, //     #####   
	0x0F, 0x80, //     #####   
	0x00, 0xE0, //         ### 
	0x00, 0x60, //          ## 
	0x00, 0x70, //          ###
	0x00, 0x70, //          ###
	0x00, 0x70, //          ###
	0x00, 0x70, //          ###
	0x80, 0xE0, // #       ### 
	0xE1, 0xE0, // ###    #### 
	0xFF, 0xC0, // ##########  
	0x3F, 0x00, //   ######    
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             

	/* @891 '4' (13 pixels wide) */
	0x00, 0x00, //              
	0x00, 0x00, //              
	0x00, 0xE0, //         ###  
	0x01, 0xE0, //        ####  
	0x03, 0xE0, //       #####  
	0x06, 0xE0, //      ## ###  
	0x06, 0xE0, //      ## ###  
	0x0C, 0xE0, //     ##  ###  
	0x18, 0xE0, //    ##   ###  
	0x30, 0xE0, //   ##    ###  
	0x60, 0xE0, //  ##     ###  
	0x60, 0xE0, //  ##     ###  
	0xC0, 0xE0, // ##      ###  
	0xFF, 0xF8, // #############
	0xFF, 0xF8, // #############
	0x00, 0xE0, //         ###  
	0x00, 0xE0, //         ###  
	0x00, 0xE0, //         ###  
	0x00, 0xE0, //         ###  
	0x00, 0xE0, //         ###  
	0x00, 0xE0, //         ###  
	0x00, 0xE0, //         ###  
	0x00, 0x00, //              
	0x00, 0x00, //              
	0x00, 0x00, //              
	0x00, 0x00, //              
	0x00, 0x00, //              

	/* @945 '5' (12 pixels wide) */
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x7F, 0xF0, //  ###########
	0x7F, 0xF0, //  ###########
	0x70, 0x00, //  ###        
	0x70, 0x00, //  ###        
	0x70, 0x00, //  ###        
	0x70, 0x00, //  ###        
	0x70, 0x00, //  ###        
	0x7F, 0x80, //  ########   
	0x7F, 0xC0, //  #########  
	0x01, 0xE0, //        #### 
	0x00, 0xF0, //         ####
	0x00, 0x70, //          ###
	0x00, 0x70, //          ###
	0x00, 0x70, //          ###
	0x00, 0x70, //          ###
	0x00, 0x70, //          ###
	0x80, 0xE0, // #       ### 
	0xE1, 0xE0, // ###    #### 
	0xFF, 0xC0, // ##########  
	0x3F, 0x00, //   ######    
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
	0x00, 0x00, //             
             
};


Bu dizide ise kullanılan fonta ait başlangıç adresleri ve karakter genişlikleri tutuluyor.

/* Character descriptors for Tahoma 20pt */
/* { [Char width in bits], [Offset into tahoma_20ptCharBitmaps in bytes] } */
const uint16_t tahoma_20ptDescriptors[95][2] = 
{
	{5, 0}, 		/*   */ 
	{3, 27}, 		/* ! */ 
	{8, 54}, 		/* " */ 
	{16, 81}, 		/* # */ 
	{13, 135}, 		/* $ */ 
	{24, 189}, 		/* % */ 
	{18, 270}, 		/* & */ 
	{3, 351}, 		/* ' */ 
	{8, 378}, 		/* ( */ 
	{8, 405}, 		/* ) */ 
	{12, 432}, 		/* * */ 
	{16, 486}, 		/* + */ 
	{6, 540}, 		/* , */ 
	{7, 567}, 		/* - */ 
	{3, 594}, 		/* . */ 
	{10, 621}, 		/* / */ 
	{13, 675}, 		/* 0 */ 
	{11, 729}, 		/* 1 */ 
	{12, 783}, 		/* 2 */ 
	{12, 837}, 		/* 3 */ 
	{13, 891}, 		/* 4 */ 
	{12, 945}, 		/* 5 */ 
	{13, 999}, 		/* 6 */ 
	{12, 1053}, 		/* 7 */ 
	{13, 1107}, 		/* 8 */ 
	{13, 1161}, 		/* 9 */ 
	{3, 1215}, 		/* : */ 
	{6, 1242}, 		/* ; */ 
	{14, 1269}, 		/* < */ 
	{15, 1323}, 		/* = */ 
	{14, 1377}, 		/* > */ 
	{11, 1431}, 		/* ? */ 
	{21, 1485}, 		/* @ */ 
	{16, 1566}, 		/* A */ 
	{13, 1620}, 		/* B */ 
	{14, 1674}, 		/* C */ 
	{15, 1728}, 		/* D */ 
	{12, 1782}, 		/* E */ 
	{12, 1836}, 		/* F */ 
	{16, 1890}, 		/* G */ 
	{14, 1944}, 		/* H */ 
	{9, 1998}, 		/* I */ 
	{9, 2052}, 		/* J */ 
	{14, 2106}, 		/* K */ 
	{11, 2160}, 		/* L */ 
	{17, 2214}, 		/* M */ 
	{14, 2295}, 		/* N */ 
	{17, 2349}, 		/* O */ 
	{13, 2430}, 		/* P */ 
	{17, 2484}, 		/* Q */ 
	{15, 2565}, 		/* R */ 
	{13, 2619}, 		/* S */ 
	{17, 2673}, 		/* T */ 
	{14, 2754}, 		/* U */ 
	{16, 2808}, 		/* V */ 
	{24, 2862}, 		/* W */ 
	{16, 2943}, 		/* X */ 
	{17, 2997}, 		/* Y */ 
	{13, 3078}, 		/* Z */ 
	{7, 3132}, 		/* [ */ 
	{10, 3159}, 		/* \ */ 
	{7, 3213}, 		/* ] */ 
	{16, 3240}, 		/* ^ */ 
	{15, 3294}, 		/* _ */ 
	{6, 3348}, 		/* ` */ 
	{11, 3375}, 		/* a */ 
	{12, 3429}, 		/* b */ 
	{10, 3483}, 		/* c */ 
	{12, 3537}, 		/* d */ 
	{12, 3591}, 		/* e */ 
	{9, 3645}, 		/* f */ 
	{12, 3699}, 		/* g */ 
	{11, 3753}, 		/* h */ 
	{3, 3807}, 		/* i */ 
	{7, 3834}, 		/* j */ 
	{12, 3861}, 		/* k */ 
	{3, 3915}, 		/* l */ 
	{19, 3942}, 		/* m */ 
	{11, 4023}, 		/* n */ 
	{13, 4077}, 		/* o */ 
	{12, 4131}, 		/* p */ 
	{12, 4185}, 		/* q */ 
	{8, 4239}, 		/* r */ 
	{10, 4266}, 		/* s */ 
	{9, 4320}, 		/* t */ 
	{11, 4374}, 		/* u */ 
	{13, 4428}, 		/* v */ 
	{20, 4482}, 		/* w */ 
	{13, 4563}, 		/* x */ 
	{13, 4617}, 		/* y */ 
	{10, 4671}, 		/* z */ 
	{11, 4725}, 		/* { */ 
	{3, 4779}, 		/* | */ 
	{11, 4806}, 		/* } */ 
	{16, 4860}, 		/* ~ */ 
};


Bu iki dizi ve birkaç parametreyi en başta belirttiğim tFONT yapısı altında toplamak istiyorum.

Kodun en altına tFONT yapısında bir değişken tanımladım ve içeriğini aşağıdaki gibi yaptım.
/* Font information for Tahoma 20pt */
tFONT tahoma_20ptFontInfo =
{
	27, /*  Character height */
	' ', /*  Start character */
	'~', /*  End character   */
	tahoma_20ptDescriptors,  /*  Character descriptor array */
	tahoma_20ptBitmaps,      /*  Character bitmap array */
};


Kodu derlediğimde keil bana şu hatayı veriyor.
Alıntı Yap..\Library\P10_Library\Tahoma20pt.c(2873): error:  #144: a value of type "const uint16_t (*)[2]" cannot be used to initialize an entity of type "const uint16_t *"

Anladığım kadarıyla tahoma_20ptDescriptors dizisinin iki boyutlu olması problem yaratıyor. Nasıl yapacağımı anlayamadım.  Amacım dediğim gibi programın verdiği çıktıya en uygun yapıyı oluşturarak min konfigürasyonla yeni font ekleyebilmeyi hedefliyorum.

Yardımcı olabilecek olan var mı?

yldzelektronik

Selam.


tahoma_20otDescriptor



bir pointer pointer. Yani bir göstericiyi gösteren gösterici. Ancak siz böyle bir değişkeni kalkıp göstericiye atama yapamazsınız. Bunun için
tahoma_20otDescriptor[0]



demeniz gerekebilir.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Mucit23

@yldzelektronik

Tamam o şekilde hata vermedi ama nedeni anlayamadım hala. tahoma_20ptBitmaps 'da normalde bir pointer. Ben struct yapısı içerisinde ikisinide pointer olarak tanımlamışım zaten.  tahoma_20ptBitmaps'da neden hata vermiyor. Yapı aklıma yatmadı halen.



Mucit23

Ekleme:


O şekilde hata vermedi ama tahoma_20ptDescriptors dizisine iki boyutlu olarak erişemedim.


tFONT YeniFont;



  uint8_t data;
  uint16_t fontdesc;


  data=YeniFont.FontBitmap[0];  //sıkıntı yok
fontdesc=YeniFont.FontDescriptor[0][0]; //Hata var
fontdesc=YeniFont.FontDescriptor[0]; //Problem yok.

yldzelektronik

@Mucit23
Sizin erişmeye çalıştığınız iki boyutlu bir dizi. Böyle bir diziye pointer üzerinden tam olarak erişemezsiniz.
Sizin iki boyutlu dizinizi bir tablo gibi değerlendirin.
_2DArray[ 2 ][ 4 ]
şeklindeki bir dizi aslında şöyle;
_2DArray1[ 4 ], _2DArray2[ 4 ]
Siz erişim sağlarken
uint_16 *pArray;
kullanırsanız, dizinin yalnızca bir boyutuna erişebilirsiniz. Her iki boyutu için
uint16_t **ppArray;
kullanabilirsiniz.


Unutmayalım. Diziler de birer göstericidir.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Mucit23

Tamam şimdi anladım. Benim kafamı karıştıran iki boyutlu dizilerin struct içerisinde kullanılması oldu.  ???

Şimdi tanımlamış olduğum struct aşağıdaki gibi.

typedef struct 
{
   const uint8_t Height;
	 const char StartChar;
	 const char EndChar;
	 const uint16_t **FontDescriptor;
	 const uint8_t *FontBitmap;
} tFONT;


Font Descriptor dizim ise aşağıdaki gibi
const uint16_t tahoma_20ptDescriptors[95][2] = 
{
	{5, 0}, 		/*   */ 
	{3, 27}, 		/* ! */ 
	{8, 54}, 		/* " */ 
	{16, 81}, 		/* # */ 
	{13, 135}, 		/* $ */
.
.
.


Bu yapıya göre aşağıdaki gibi bir değişken tanımladım.

/* Font information for Tahoma 20pt */
tFONT tahoma_20ptFontInfo =
{
	27, /*  Character height */
	' ', /*  Start character */
	'~', /*  End character   */
	(const uint16_t **)tahoma_20ptDescriptors,  /*  Character descriptor array */
	(const uint8_t *)tahoma_20ptBitmaps      /*  Character bitmap array */
};


Kullanıma gelince,

tFONT YeniFont;

  uint8_t data;
  uint16_t fontdesc;

  data=YeniFont.FontBitmap[0];
  fontdesc=YeniFont.FontDescriptor[0][0];

Bu durumda fontdesc değişkenim 5 değerini alması lazım.

Son olarak şunu sorayım. Keil'de iki boyutlu bir dizi tanımlarken illa boyut vermek gerekiyormu?

const uint16_t tahoma_20ptDescriptors[95][2] = 
{
	{5, 0}, 		/*   */ 
	{3, 27}, 		/* ! */ 
	{8, 54}, 		/* " */ 
	{16, 81}, 		/* # */ 
	{13, 135}, 		/* $ */ 
	{24, 189}, 		/* % */ 
	{18, 270}, 		/* & */


bu şekilde tanımlı ama boyutu ben kendim sayıp belirliyorum. Hatta kodun orjinalinde const uint16_t tahoma_20ptDescriptors[] ={... şeklinde tanımlı. Keil bunu kabul etmiyor.

yldzelektronik

#7
Normalde (bildiğim kadarıyla) C'de boyutu belli olmayan dizi tanımlayamazsınız. Ancak eğer değişken initialize sırasında boyutu belli ise sizin belirtmeniz gerekmez. Eleman sayısı kadar boyut tanımlayacaktır.
Mesela;
uint16_t array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
şeklide 10 elemanlı bir dizi tanımladığınızda, boyut belirtmeniz gerekmez.
Ancak diyelim ki 20 eleman ihtiyacınız var ve sadece 10 tanesinin değerini initialize sırasında girdiniz.Böyle bir durumda boyut belirtmek zorundasınız.
Bir de zero initialize konusu var.O da zaten dizi boyutu belirtmeden olmaz.
Bu arada Keil Compiler GCC'nin kızmadığı bir çok şeye kızıyor, GCC'nin kızdığı bir çok şeye kızmıyor.Ancak her ikisi de ANSI C.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Mucit23

#8
Selamlar

Bugün font basma işleriyle uğraşıyordum. Struct yapısını oturttum diye düşünüyordum ama çok fazla sorun var. İşlemcim sürekli Hard Faulta düşüyor.

Kod derlenirken hiçbir sıkıntı yok ama bu uygulamak istediğim yapı çalışmıyor.

Basitten giderek sorunu anlamaya çalışıyorum.
Örneğin tahoma_8ptBitmaps diye bir dizim var karakter datalarını içeriyor.

// Character bitmaps for Tahoma 8pt
const uint8_t tahoma_8ptBitmaps[] = 
{
	// @0 ' ' (3 pixels wide)
	0xAA, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //    
	0x00, //
.
.
. 


Ben bu diziye main içerisinden doğrudan erişmek için programın başına aşağıdaki gibi bir tanımlama yapıyorum
   extern const uint8_t tahoma_8ptBitmaps;
Sonra dizinin örneğin 0. elemanına ulaşmak için aşağıdaki gibi bir yapı kullanıyorum.

      Value=tahoma_8ptBitmaps[0];

Bana şu hatayı veriyor.
Alıntı Yap../Src/main.c(193): error:  #142: expression must have pointer-to-object type

Anladığım kadarıyla tanımladığım dizi bir pointer olarak hafızada tutuluyor.

Bende başka bir pointer tanımlayıp diziyi tanımladığım pointer'a atayıp o şekilde verime ulaştım.

      pointer=(uint8_t *)&tahoma_8ptBitmaps;
      VarValue=pointer[0];

Bu aktarım işlemi neden gerekli. Const olarak hafızada tanımlı bir diziye doğrudan erişim neden mümkün olmuyor?

baran123

@Mucit23 hocam böyle değil.
extern const uint8_t tahoma_8ptBitmaps;


Şu şekilde olacak
extern const uint8_t tahoma_8ptBitmaps[];


Mucit23

Dün o kadar çok uğraştım ki artık herşey birbirine girdi. Evet Onda sıkıntı yok. Fakat asıl sorunda o değil aslında. Şöyle anlatayım. 

tFONT diye bir struct yapısı oluşturmuştum zaten.
typedef struct 
{
   uint8_t Height;
	 char StartChar;
	 char EndChar;
	 const uint16_t **FontDescriptor;
	 const uint8_t *FontBitmap;
} tFONT;


Yapı içerisinde FontDescriptor ve FontBitmap diye iki adet pointer bulunuyor.

Her bir Font Dosyamdada bu yapıları kullanarak font ile ilgili bazı parametreleri bulunduruyorum.
// Font information for Tahoma 12pt
tFONT tahoma_12ptFontInfo =
{
	16, //  Character height
	' ', //  Start character
	'~', //  End character
	(const uint16_t **)tahoma_12ptDescriptors, //  Character descriptor array
	(uint8_t *)tahoma_12ptBitmaps, //  Character bitmap array
};


Şimdi bundan sonra tFONT türünde bir değişken tanımlayıp font dosyasındaki tahoma_12ptFontInfo değişkenini bu tanımadığım değişkene eşitleyince Font ile ilgili bütün parametreler P10_Currentfonts yapısına aktarılmış oluyor

tFONT P10_Currentfonts;
P10_Currentfonts=tahoma_12ptFontInfo;


Şimdi bu yapı içerisindeki dizilere doğrudan ulaşmaya çalışıyorum ama ulaşamıyorum.
Tek boyutlu olan FontBitmap dizisine yine bir pointer kullanarak ulaşabildim. Tam olarak şöyle

      pointer=(uint8_t *)P10_Currentfonts.FontBitmap ;
      Value=pointer[0];  //FontBitmap dizisinin 0. değeri.

Tek boyutluya bu şekilde ulaşabiliyorum ama iki boyutlu diziye bir türlü ulaşamadım. Daha önce pointer'lar ve struct yapıları ile ilgili hiç bu kadar haşır neşir olmamıştım.

Amacım aşağıdaki gibi bir yapı oluşturmak

Value = P10_Currentfonts.FontBitmap[0];
Value = P10_Currentfonts.FontDescriptor[0][0];

Bunu bir türlü oturtturamadım.

baran123

Hocam şu kadar yapabildim :)
typedef struct 
{
    uint8_t Height;
    char StartChar;
    char EndChar;
    const uint8_t   *FontBitmap;
    const uint16_t (*FontDescriptor)[3][8];
}Font_t;

const uint16_t tahoma_12ptBitmaps[8] =            {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

const uint16_t tahoma_12ptDescriptors[3][8] =   { {0, 1, 2, 3, 4, 5, 6, 7},
                                                  {8, 9, 10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
                                                  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} };

Font_t tahoma_12ptFontInfo =
{
	16,                                         //  Character height
	' ',                                        //  Start character
	'~',                                        //  End character
        (const uint8_t *)tahoma_12ptBitmaps,        //  Character bitmap array
	(const uint16_t *)tahoma_12ptDescriptors,   //  Character descriptor array
};

int main(void) 
{  
    Font_t P10_Currentfonts;
    P10_Currentfonts = tahoma_12ptFontInfo;

    uint8_t value1 = P10_Currentfonts.FontBitmap[0];
    uint16_t value2 = (*P10_Currentfonts.FontDescriptor)[1][0];
    
    printf ("%d\n\r", value1); // 255
    printf ("%d\n\r", value2); // 8

   return(0);
}

Mucit23

@baran123 Sen kodu derleyebildinmi? Ben derleyemedim. Hata veriyor.

Struct yapısını bu şekilde yaptım.
typedef struct 
{
   uint8_t Height;
	 char StartChar;
	 char EndChar;
	 const uint16_t (*FontDescriptor)[95][2];
	 const uint8_t *FontBitmap;
} tFONT;


Bu tek başına derleniyor.

Fakat bu yapıya göre fontinfo tanımladığımda hata veriyor.
Aşağıdaki gibi.

// Font information for Tahoma 8pt
tFONT tahoma_8ptFontInfo =
{
	11, //  Character height
	' ', //  Start character
	'~', //  End character
	(const uint16_t *)tahoma_8ptDescriptors, //  Character descriptor array
	(const uint8_t *)tahoma_8ptBitmaps, //  Character bitmap array
};


Verdiği hatada budur.
Alıntı Yap..\Library\P10_Library\Tahoma8pt.c(1353): error:  #144: a value of type "const uint16_t *" cannot be used to initialize an entity of type "const uint16_t (*)[95][2]"

Boyutla ilgili bir sıkıntımı var acaba

baran123

@Mucit23 Hocam ben NetBeans IDE ile bilgisayarda derliyorum problem yok.
(const uint8_t *)tahoma_8ptBitmaps,
burada virgülü silmek gerekmiyor mu ?

Mucit23

Yok Keil izin vermiyor o şekilde derlememe. Bu arada virgülü yeni farkettim. Keil Ona kızmıyor derliyor. O virgülde font oluşturduğum programdan kalma. Bütün font dosyalarımda var. Yeni Farkettim.


Soruyu şu şekilde güncelleyelim.


Bir Struct Yapısı içeirisinde İki boyutlu bir dizinin pointer ile gösterimini nasıl yaparım?
Pointerlar ile iki boyutlu dizileri göstermeyi anlatabilecek olan varmı?