#ifdef #else #endif #fi #ifndef 的用法

本文介绍了C/C++中预处理的概念及作用,并详细解析了条件编译指令的三种应用场景,包括如何通过条件编译控制代码块的编译与否。

转载自:http://bbs.youkuaiyun.com/topics/210046082

预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。
   关于预处理命令中的文件包含(#include),宏定义(#define),书上已经有了详细的说明,在这里就不详述了。这里主要是对条件编译(#ifdef,#else,#endif,#if等)进行说明。以下分3种情况:
  1:情况1:
  #ifdef _XXXX
  ...程序段1...
  #else
  ...程序段2...
  #endif
   这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。
  例: 
  #define NUM
  .............
  .............
  .............
  #ifdef NUM
   printf("之前NUM有过定义啦!:) \n");
  #else
   printf("之前NUM没有过定义!:( \n");
  #endif
  }
   如果程序开头有#define NUM这行,即NUM有定义,碰到下面#ifdef NUM的时候,当然执行第一个printf。否则第二个printf将被执行。
   我认为,用这种,可以很方便的开启/关闭整个程序的某项特定功能。
  2:情况2: 
  #ifndef _XXXX 
  ...程序段1... 
  #else 
  ...程序段2... 
  #endif
   这里使用了#ifndef,表示的是if not def。当然是和#ifdef相反的状况(如果没有定义了标识符_XXXX,那么执行程序段1,否则执行程序段2)。例子就不举了。
  3:情况3:
  #if 常量 
  ...程序段1...
  #else
  ...程序段2...
  #endif 
   这里表示,如果常量为真(非0,随便什么数字,只要不是0),就执行程序段1,否则执行程序段2。
   我认为,这种方法可以将测试代码加进来。当需要开启测试的时候,只要将常量变1就好了。而不要测试的时候,只要将常量变0。

现在是这样的。怎么修改。我只采信了你前面答案的部分修改。/* NVT board configuration */ #define CONFIG_MEM_SIZE _BOARD_DRAM_SIZE_ #ifndef SZ_1M #define SZ_1M 0x100000 #endif /** * kernel image and all-in-one image size * user can add NVT_CFG_UBOOT_UIMAGE_SIZE and NVT_CFG_UBOOT_ALL_IN_ONE_IMG_SIZE * on nvt-info.dtsi to change them. */ #if (!defined(CONFIG_NVT_UIMAGE_SIZE) && !defined(CONFIG_NVT_UIMAGE_SIZE)) #if (CONFIG_MEM_SIZE == (SZ_1M * 256)) #define CONFIG_NVT_UIMAGE_SIZE (SZ_1M * 25) #define CONFIG_NVT_ALL_IN_ONE_IMG_SIZE (SZ_1M * 120) #elif (CONFIG_MEM_SIZE == (SZ_1M * 128)) #define CONFIG_NVT_UIMAGE_SIZE (SZ_1M * 8) #define CONFIG_NVT_ALL_IN_ONE_IMG_SIZE (SZ_1M * 32) #elif (CONFIG_MEM_SIZE == (SZ_1M * 64)) #define CONFIG_NVT_UIMAGE_SIZE (SZ_1M * 4) #define CONFIG_NVT_ALL_IN_ONE_IMG_SIZE (SZ_1M * 20) #else #define CONFIG_NVT_UIMAGE_SIZE (SZ_1M * 25) #define CONFIG_NVT_ALL_IN_ONE_IMG_SIZE (SZ_1M * 330) #endif #endif /* (!defined(CONFIG_NVT_UIMAGE_SIZE) && !defined(CONFIG_NVT_UIMAGE_SIZE)) */ /* temp buffer for all-in-one T.bin boot requirement */ #define CONFIG_UBOOT_SDRAM_BASE _BOARD_UBOOT_ADDR_ #define CONFIG_UBOOT_SDRAM_SIZE _BOARD_UBOOT_SIZE_ #define CONFIG_LINUX_SDRAM_BASE _BOARD_LINUXTMP_ADDR_ #define CONFIG_LINUX_SDRAM_SIZE _BOARD_LINUXTMP_SIZE_ #if (CONFIG_UBOOT_SDRAM_BASE > CONFIG_LINUX_SDRAM_BASE) #define CONFIG_LINUX_SDRAM_START (CONFIG_UBOOT_SDRAM_BASE - CONFIG_NVT_UIMAGE_SIZE) #else #define CONFIG_LINUX_SDRAM_START (CONFIG_LINUX_SDRAM_BASE + CONFIG_LINUX_SDRAM_SIZE - CONFIG_NVT_UIMAGE_SIZE) #endif #define CONFIG_NVT_RUNFW_SDRAM_BASE (CONFIG_LINUX_SDRAM_START - CONFIG_NVT_ALL_IN_ONE_IMG_SIZE) #define CONFIG_RAMDISK_SDRAM_SIZE (SZ_1M * 30) /* To define maximum ramdisk size */ #define CONFIG_SMEM_SDRAM_BASE _BOARD_SHMEM_ADDR_ #define CONFIG_SMEM_SDRAM_SIZE _BOARD_SHMEM_SIZE_ #define CONFIG_FDT_SDRAM_BASE _BOARD_FDT_ADDR_ #define CONFIG_FDT_SDRAM_SIZE _BOARD_FDT_SIZE_ #if defined(CONFIG_NVT_SPI_NAND) #if (_EMBMEM_BLK_SIZE_ == 0x40000) #define CONFIG_MODELEXT_FLASH_BASE 0x80000 #else #define CONFIG_MODELEXT_FLASH_BASE 0x40000 #endif #elif defined(CONFIG_NVT_IVOT_EMMC) #define CONFIG_MODELEXT_FLASH_BASE (0x40000/512) #else #define CONFIG_MODELEXT_FLASH_BASE 0x10000 #endif /* FLASH FileSystem */ #if defined(CONFIG_NVT_SPI_NAND) || defined(CONFIG_NVT_SPI_NONE) || defined(CONFIG_NVT_SPI_NOR_NAND) #define CONFIG_SYS_MAX_NAND_DEVICE 1 #define CONFIG_SYS_NAND_MAX_CHIPS 1 #endif #define CONFIG_SYS_L2_PL310 #define CONFIG_SYS_PL310_BASE 0xFFE00000 /* #define CONFIG_SYS_CACHELINE_SIZE 32 */ #ifdef CONFIG_NVT_FPGA_EMULATION #define CONFIG_SYS_CPU_CLK 24000000 #define CONFIG_SYS_HZ_CLOCK CONFIG_SYS_CPU_CLK #else /* !CONFIG_NVT_FPGA_EMULATION */ #define CONFIG_SYS_CPU_CLK 960000000 #define CONFIG_SYS_HZ_CLOCK CONFIG_SYS_CPU_CLK #endif /* CONFIG_NVT_FPGA_EMULATION */ /* * Serial driver init. * */ #define CONFIG_SYS_NS16550_SERIAL #define CONFIG_SYS_NS16550_MEM32 #define CONFIG_SYS_NS16550_REG_SIZE -1 #define CONFIG_SYS_NS16550_COM1 0xf0290000 #define CONFIG_SYS_NS16550_COM2 0xf0300000 #define CONFIG_SYS_NS16550_COM3 0xf0310000 #define CONFIG_SYS_NS16550_COM4 0xf0380000 #define CONFIG_SYS_NS16550_COM5 0xf03E0000 #define CONFIG_SYS_NS16550_COM6 0xf03F0000 #define CONFIG_SYS_NS16550_CLK 24000000 /* COM1: 24M, other COM port 48M */ #define CONFIG_SYS_NS16550_HSCLK 48000000 /* COM1: 24M, other COM port 48M */ /* Secure boot relative option */ #ifdef _ENCRYPT_ATF_ON_ #define CONFIG_ENCRYPT_ATF #endif #ifdef _ENCRYPT_CFG_ON_ #define CONFIG_ENCRYPT_CFG #endif #ifdef _ENCRYPT_UBOOT_ON_ #define CONFIG_ENCRYPT_UBOOT #endif #ifdef _ENCRYPT_KERNEL_ON_ #define CONFIG_ENCRYPT_KERNEL #endif #ifdef _ENCRYPT_RTOS_ON_ #define CONFIG_ENCRYPT_RTOS #endif #ifdef _ENCRYPT_OPTEE_ON_ #define CONFIG_ENCRYPT_OPTEE #endif /sunhaoming@ubuntu:~/ipc_platform/platform/nvmp/build_dir/target-arm-ca9-linux-uclibcgnueabihf-c540-4gv2/linux-nvt9856x_generic/bootloader/normal_boot$ make clean && make V=1 set -e; : ' CHK include/config/uboot.release'; mkdir -p include/config/; echo "2019.04$(/bin/sh ./scripts/setlocalversion .)" < include/config/auto.conf > include/config/uboot.release.tmp; if [ -r include/config/uboot.release ] && cmp -s include/config/uboot.release include/config/uboot.release.tmp; then rm -f include/config/uboot.release.tmp; else : ' UPD include/config/uboot.release'; mv -f include/config/uboot.release.tmp include/config/uboot.release; fi make -f ./scripts/Makefile.autoconf u-boot.cfg if [ -d arch/arm/mach-nvt-na51089_a32/include/mach ]; then \ dest=../../mach-nvt-na51089_a32/include/mach; \ else \ dest=arch-nvt-na51089_a32; \ fi; \ ln -fsn $dest arch/arm/include/asm/arch set -e; : ' CHK include/config.h'; mkdir -p include/; (echo "/* Automatically generated - do not edit */"; for i in $(echo "" | sed 's/,/ /g'); do echo \#define CONFIG_$i | sed '/=/ {s/=/ /;q; } ; { s/$/ 1/; }'; done; echo \#define CONFIG_BOARDDIR board/novatek/nvt-na51089; echo \#include \<config_defaults.h\>; echo \#include \<config_uncmd_spl.h\>; echo \#include \<configs/"nvt-na51089-evb".h\>; echo \#include \<asm/config.h\>; echo \#include \<linux/kconfig.h\>; echo \#include \<config_fallbacks.h\>;) < scripts/Makefile.autoconf > include/config.h.tmp; if [ -r include/config.h ] && cmp -s include/config.h include/config.h.tmp; then rm -f include/config.h.tmp; else : ' UPD include/config.h'; mv -f include/config.h.tmp include/config.h; fi gcc -E -Wall -Wstrict-prototypes -Wno-format-security -fno-builtin -ffreestanding -std=gnu11 -fshort-wchar -fno-strict-aliasing -fno-PIE -DFLASH_REDBOOT -Os -fno-stack-protector -fno-delete-null-pointer-checks -g -fstack-usage -Wno-format-nonliteral -Werror=date-time -D__KERNEL__ -D__UBOOT__ -I/libutils/src -I/libsdm/src -D__ARM__ -fno-pic -D_BOARD_DRAM_ADDR_= -D_BOARD_DRAM_SIZE_= -D_BOARD_SHMEM_ADDR_= -D_BOARD_SHMEM_SIZE_= -D_BOARD_FDT_ADDR_= -D_BOARD_FDT_SIZE_= -D_BOARD_LINUXTMP_ADDR_= -D_BOARD_LINUXTMP_SIZE_= -D_BOARD_LINUX_MAXBLK_ADDR_= -D_BOARD_LINUX_MAXBLK_SIZE_= -D_BOARD_LOADER_ADDR_= -D_BOARD_LOADER_SIZE_= -D_BOARD_EXTDRAM_ADDR_= -D_BOARD_EXTDRAM_SIZE_= -D_BOARD_LINUX_ADDR_= -D_BOARD_LINUX_SIZE_= -D_BIN_NAME_='""' -D_BIN_NAME_T_='""' -D_CHIP__ -D_CHIP_NAME_='"NT"' -D__ -D_EMBMEM_BLK_SIZE_= -D__ -D__ -D__ -D__ -D__ -D__ -D__ -D__ -D__ -ffunction-sections -fdata-sections -fno-common -ffixed-r9 -msoft-float -pipe -Iinclude -I./arch/arm/include -include ./include/linux/kconfig.h -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/5/include -DDO_DEPS_ONLY -dM ./include/common.h > u-boot.cfg.tmp && { grep 'define CONFIG_' u-boot.cfg.tmp > u-boot.cfg; rm u-boot.cfg.tmp; } || { rm u-boot.cfg.tmp; false; } In file included from include/configs/nvt-na51089-evb.h:108:0, from include/config.h:5, from ./include/common.h:17: include/configs/novatek/na51089_ca9.h:9:22: error: operator '==' has no left operand #if (CONFIG_MEM_SIZE == (SZ_1M * 256)) ^ include/configs/novatek/na51089_ca9.h:12:24: error: operator '==' has no left operand #elif (CONFIG_MEM_SIZE == (SZ_1M * 128)) ^ include/configs/novatek/na51089_ca9.h:15:24: error: operator '==' has no left operand #elif (CONFIG_MEM_SIZE == (SZ_1M * 64)) ^ include/configs/novatek/na51089_ca9.h:29:55: error: operator '>' has no right operand #if (CONFIG_UBOOT_SDRAM_BASE > CONFIG_LINUX_SDRAM_BASE) ^ scripts/Makefile.autoconf:77: recipe for target 'u-boot.cfg' failed make[1]: *** [u-boot.cfg] Error 1 Makefile:836: recipe for target 'u-boot.cfg' failed make: *** [u-boot.cfg] Error 2
最新发布
12-18
请作为资深开发工程师,解释我给出的代码。请逐行分析我的代码并给出你对这段代码的理解。 我给出的代码是: #include "Inc.h" volatile U8 code CusFwCompDate[9] = __DATE2__; volatile U8 code CusFwCompTime[9] = __TIME__; // ===>product string<=== U8 code iProduct[] = { 12, 0x03, 'U', 'S', 'B', ' ', 'C', 'a', 'm', 'e', 'r', 'a' }; #ifdef _UAC_EXIST_ U8 code iProduct_MIC[] = { // MID = 1111 "RTS5101-01" //LuLu S800 Audio 11, 3, 'U', 'S', 'B', ' ', 'A', 'u', 'd', 'i', 'o' }; #endif // ===>Device Descriptor<=== U8 code VideoDevDesc[18]= { DESC_SIZE_DEV, //bLength: 0x01, //USB_DEVICE_DESCRIPTOR_TYPE, //bDescriptorType: 0x00, //bcdUSB version:NORM:0200H 0x02, DEV_CLS_MULTI, //bDeviceClass: -> This is a Multi-interface Function Code Device DEV_SUBCLS_COMMON, //bDeviceSubClass: -> This is the Common Class Sub Class DEV_PROTOCOL_IAD, //bDeviceProtocol: -> This is the Interface Association Descriptor protocol 0x40, //bMaxPacketSize0: = (64) Bytes _RT_VID_L_, //idVendor: = Realtek Corp. _RT_VID_H_, _5841_PID_L_, //idProduct: _5841_PID_H_, 0x00,//FW_TRUNK_VERSION%256,//_FW_SUB_VER_, //bcdDevice: 1.00 0x00,//FW_TRUNK_VERSION/256,//_FW_MAIN_VER_, I_MANUFACTURER, //iManufacturer: I_PRODUCT, //iProduct: I_SERIALNUMBER, //iSerialNumber: 0x01 //bNumConfigurations: }; void InitCustomizedVars(void ) { InitSensorGlobalVar(); // property page control enable/disable #ifdef _AF_ENABLE_ g_wCamTrmCtlSel=CT_CTL_SEL_AUTO_EXP_MODE |CT_CTL_SEL_AUTO_EXP_PRY // hemonel 2009-09-21: enable low light compensation for foxlink+HP commercial |CT_CTL_SEL_EXPOSURE_TIME_ABS //CT_CTL_SEL_EXPOSURE_TIME_REL //|CT_CTL_SEL_PANTILT_ABS //|CT_CTL_SEL_ZOOM_ABS |CT_CTL_SEL_ROLL_ABS |CT_CTL_SEL_FOCUS_ABS ; g_byCamTrmCtlSel_Ext = 0 |CT_CTL_SEL_FOCUS_AUTO #ifdef _UVC_1V5_ |CT_CTL_SEL_ROI #endif ; #else g_wCamTrmCtlSel=CT_CTL_SEL_AUTO_EXP_MODE |CT_CTL_SEL_AUTO_EXP_PRY // hemonel 2009-09-21: enable low light compensation for foxlink+HP commercial |CT_CTL_SEL_EXPOSURE_TIME_ABS //CT_CTL_SEL_EXPOSURE_TIME_REL //|CT_CTL_SEL_PANTILT_ABS //|CT_CTL_SEL_ZOOM_ABS |CT_CTL_SEL_ROLL_ABS ; #ifdef _UVC_1V5_ g_byCamTrmCtlSel_Ext = CT_CTL_SEL_ROI; #else g_byCamTrmCtlSel_Ext = 0; #endif #endif g_wProcUnitCtlSel=PU_CTL_SEL_BRIGHTNESS |PU_CTL_SEL_CONTRAST |PU_CTL_SEL_HUE |PU_CTL_SEL_SATURATION |PU_CTL_SEL_SHARPNESS |PU_CTL_SEL_GAMMA |PU_CTL_SEL_WHITE_BALANCE_TEMPERATURE //|PU_CTL_SEL_WHITE_BALANCE_COMPONENT |PU_CTL_SEL_BACKLIGHT_COMPENSATION //#ifdef _MANUAL_ET_GAIN_TEST_ |PU_CTL_SEL_GAIN //#endif |PU_CTL_SEL_POWER_LINE_FREQUENCY //|PU_CTL_SEL_HUE_AUTO |PU_CTL_SEL_WHITE_BALANCE_TEMPERATURE_AUTO //|PU_CTL_SEL_WHITE_BALANCE_COMPONENT_AUTO //|PU_CTL_SEL_DIGITAL_MULTIPLIER //|PU_CTL_SEL_DIGITAL_MULTIPLIER_LIMIT ; #if defined _UVC_REALTEK_EXTENDEDUNIT_ || defined _LENOVO_IDEA_EYE_EXTENDEDUNIT_ g_dwRtkExtUnitCtlSel = 0 #ifdef _UVC_REALTEK_EXTENDEDUNIT_ |RTK_EXT_CTL_SEL_ISP_SPECIAL_EFFECT |RTK_EXT_CTL_SEL_EVCOM |RTK_EXT_CTL_SEL_CTE |RTK_EXT_CTL_SEL_AE_LOCK |RTK_EXT_CTL_SEL_AWB_LOCK |RTK_EXT_CTL_SEL_AF_LOCK #ifdef _FLASH_LED_ENABLE_ |RTK_EXT_CTL_SEL_LED_TORCH |RTK_EXT_CTL_SEL_LED_FLASH #endif #ifdef _EXT_ISO_ENABLE_ |RTK_EXT_CTL_SEL_ISO #endif #ifdef _SCENE_MODE_ |RTK_EXT_CTL_SEL_SCENE_MODE #endif |RTK_EXT_CTL_SEL_ROI_MODE #ifndef _UVC_1V5_ |RTK_EXT_CTL_SEL_ROI #endif |RTK_EXT_CTL_SEL_3ASTS #endif #endif #ifdef _LENOVO_IDEA_EYE_EXTENDEDUNIT_ |RTK_EXT_CTL_SEL_IDEAEYE_SENSITIVITY |RTK_EXT_CTL_SEL_IDEAEYE_STATUS |RTK_EXT_CTL_SEL_IDEAEYE_MODE #endif ; // property page process unit control configure BrightnessItem.Min = CTL_MIN_PU_BRIGHTNESS;//min BrightnessItem.Max = CTL_MAX_PU_BRIGHTNESS;//max BrightnessItem.Res = CTL_RES_PU_BRIGHTNESS;//res BrightnessItem.Def = CTL_DEF_PU_BRIGHTNESS;//def BrightnessItem.Des = CTL_DEF_PU_BRIGHTNESS;//des BrightnessItem.Last = CTL_DEF_PU_BRIGHTNESS;//last ContrastItem.Min = CTL_MIN_PU_CONTRAST;//min ContrastItem.Max = CTL_MAX_PU_CONTRAST;//max ContrastItem.Res = CTL_RES_PU_CONTRAST;//res ContrastItem.Def = CTL_DEF_PU_CONTRAST;//def ContrastItem.Des = CTL_DEF_PU_CONTRAST;//des ContrastItem.Last = CTL_DEF_PU_CONTRAST;//last HueItem.Min = CTL_MIN_PU_HUE;//min HueItem.Max = CTL_MAX_PU_HUE;//max HueItem.Res = CTL_RES_PU_HUE;//res HueItem.Def = CTL_DEF_PU_HUE;//def HueItem.Des = CTL_DEF_PU_HUE;//des HueItem.Last = CTL_DEF_PU_HUE;//last SaturationItem.Min = CTL_MIN_PU_SATURATION;//min SaturationItem.Max = CTL_MAX_PU_SATURATION;//max SaturationItem.Res = CTL_RES_PU_SATURATION;//res SaturationItem.Def = CTL_DEF_PU_SATURATION;//def SaturationItem.Des = CTL_DEF_PU_SATURATION;//des SaturationItem.Last = CTL_DEF_PU_SATURATION;//last SharpnessItem.Min = CTL_MIN_PU_SHARPNESS;//min SharpnessItem.Max = CTL_MAX_PU_SHARPNESS;//max SharpnessItem.Res = CTL_RES_PU_SHARPNESS;//res SharpnessItem.Def = CTL_DEF_PU_SHARPNESS;//def SharpnessItem.Des = CTL_DEF_PU_SHARPNESS;//des SharpnessItem.Last = CTL_DEF_PU_SHARPNESS;//last GammaItem.Min = CTL_MIN_PU_GAMMA;//min GammaItem.Max = CTL_MAX_PU_GAMMA;//max GammaItem.Res = CTL_RES_PU_GAMMA;//res GammaItem.Def = CTL_DEF_PU_GAMMA;//def GammaItem.Des = CTL_DEF_PU_GAMMA;//des GammaItem.Last = CTL_DEF_PU_GAMMA;//last WhiteBalanceTempItem.Min = CTL_MIN_PU_WHITE_BALANCE_TEMPERATURE;//min WhiteBalanceTempItem.Max = CTL_MAX_PU_WHITE_BALANCE_TEMPERATURE;//max WhiteBalanceTempItem.Res = CTL_RES_PU_WHITE_BALANCE_TEMPERATURE;//res WhiteBalanceTempItem.Def = CTL_DEF_PU_WHITE_BALANCE_TEMPERATURE;//def WhiteBalanceTempItem.Des = CTL_DEF_PU_WHITE_BALANCE_TEMPERATURE;//des WhiteBalanceTempItem.Last = CTL_DEF_PU_WHITE_BALANCE_TEMPERATURE;//last // WhiteBalanceTempAutoItem.Min = 0;//min WhiteBalanceTempAutoItem.Max = 1;//max WhiteBalanceTempAutoItem.Res = 1;//res WhiteBalanceTempAutoItem.Def = 1;//def WhiteBalanceTempAutoItem.Des = 1;//des WhiteBalanceTempAutoItem.Last = 1;//last BackLightCompItem.Min = CTL_MIN_PU_BACKLIGHTCOMP;//min BackLightCompItem.Max = CTL_MAX_PU_BACKLIGHTCOMP;//max BackLightCompItem.Res = CTL_RES_PU_BACKLIGHTCOMP;//res BackLightCompItem.Def = CTL_DEF_PU_BACKLIGHTCOMP;//def BackLightCompItem.Des = CTL_DEF_PU_BACKLIGHTCOMP;//des BackLightCompItem.Last = CTL_DEF_PU_BACKLIGHTCOMP;//last GainItem.Min = CTL_MIN_PU_GAIN;//min GainItem.Max = CTL_MAX_PU_GAIN;//max GainItem.Res = CTL_RES_PU_GAIN;//res GainItem.Def = CTL_DEF_PU_GAIN;//def GainItem.Des = CTL_DEF_PU_GAIN;//des GainItem.Last = CTL_DEF_PU_GAIN;//last PwrLineFreqItem.Min = CTL_MIN_PU_PWRLINEFRQ;//min PwrLineFreqItem.Max = CTL_MAX_PU_PWRLINEFRQ;//max PwrLineFreqItem.Res = CTL_RES_PU_PWRLINEFRQ;//res PwrLineFreqItem.Def = CTL_DEF_PU_PWRLINEFRQ;//def PwrLineFreqItem.Des = CTL_DEF_PU_PWRLINEFRQ;//des PwrLineFreqItem.Last = CTL_DEF_PU_PWRLINEFRQ;//last // property page camera terminal control configure ExposureTimeAbsolutItem.Min = CTL_MIN_CT_EXPOSURE_TIME_ABSOLUTE;//min ExposureTimeAbsolutItem.Max = CTL_MAX_CT_EXPOSURE_TIME_ABSOLUTE;//max ExposureTimeAbsolutItem.Res = CTL_RES_CT_EXPOSURE_TIME_ABSOLUTE;//res ExposureTimeAbsolutItem.Def = CTL_DEF_CT_EXPOSURE_TIME_ABSOLUTE;//def ExposureTimeAbsolutItem.Des = CTL_DEF_CT_EXPOSURE_TIME_ABSOLUTE;//des ExposureTimeAbsolutItem.Last = CTL_DEF_CT_EXPOSURE_TIME_ABSOLUTE;//last // ExposureTimeAutoItem.Min = 0;//min ExposureTimeAutoItem.Max = 1;//max ExposureTimeAutoItem.Res = EXPOSURE_TIME_AUTO_MOD_MANUAL |EXPOSURE_TIME_AUTO_MOD_APERTPRO;//res ExposureTimeAutoItem.Def = EXPOSURE_TIME_AUTO_MOD_APERTPRO;//def ExposureTimeAutoItem.Des = EXPOSURE_TIME_AUTO_MOD_APERTPRO;//des ExposureTimeAutoItem.Last = EXPOSURE_TIME_AUTO_MOD_APERTPRO;//last LowLightCompItem.Min = CTL_MIN_PU_LOWLIGHTCOMP;//min LowLightCompItem.Max = CTL_MAX_PU_LOWLIGHTCOMP;//max LowLightCompItem.Res = CTL_RES_PU_LOWLIGHTCOMP;//res LowLightCompItem.Def = CTL_DEF_PU_LOWLIGHTCOMP;//def LowLightCompItem.Des = CTL_DEF_PU_LOWLIGHTCOMP;//des LowLightCompItem.Last = CTL_DEF_PU_LOWLIGHTCOMP;//last PanItem.Min = CTL_MIN_PU_PAN;//min PanItem.Max = CTL_MAX_PU_PAN;//max PanItem.Res = CTL_RES_PU_PAN;//res PanItem.Def = CTL_DEF_PU_PAN;//def PanItem.Des = CTL_DEF_PU_PAN;//des PanItem.Last = CTL_DEF_PU_PAN;//last TiltItem.Min = CTL_MIN_PU_TILT;//min TiltItem.Max = CTL_MAX_PU_TILT;//max TiltItem.Res = CTL_RES_PU_TILT;//res TiltItem.Def = CTL_DEF_PU_TILT;//def TiltItem.Des = CTL_DEF_PU_TILT;//des TiltItem.Last = CTL_DEF_PU_TILT;//last ZoomItem.Min = CTL_MIN_PU_ZOOM;//min ZoomItem.Max = CTL_MAX_PU_ZOOM;//max ZoomItem.Res = CTL_RES_PU_ZOOM;//res ZoomItem.Def = CTL_DEF_PU_ZOOM;//def ZoomItem.Des = CTL_DEF_PU_ZOOM;//des ZoomItem.Last = CTL_DEF_PU_ZOOM;//last RollItem.Min = CTL_MIN_PU_ROLL;//min RollItem.Max = CTL_MAX_PU_ROLL;//max RollItem.Res = CTL_RES_PU_ROLL;//res RollItem.Def = CTL_DEF_PU_ROLL;//def RollItem.Des = CTL_DEF_PU_ROLL;//des RollItem.Last = CTL_DEF_PU_ROLL;//last #ifdef _AF_ENABLE_ FocusAbsolutItem.Min = CTL_MIN_CT_FOCUS_ABSOLUTE;//min FocusAbsolutItem.Max = CTL_MAX_CT_FOCUS_ABSOLUTE;//max FocusAbsolutItem.Res = CTL_RES_CT_FOCUS_ABSOLUTE;//res FocusAbsolutItem.Def = CTL_DEF_CT_FOCUS_ABSOLUTE;//def FocusAbsolutItem.Des = CTL_DEF_CT_FOCUS_ABSOLUTE;//des FocusAbsolutItem.Last = CTL_DEF_CT_FOCUS_ABSOLUTE;//last FocusAutoItem.Min = CTL_MIN_CT_FOCUS_AUTO;//min FocusAutoItem.Max = CTL_MAX_CT_FOCUS_AUTO;//max FocusAutoItem.Res = CTL_RES_CT_FOCUS_AUTO;//res FocusAutoItem.Def = CTL_DEF_CT_FOCUS_AUTO;//def FocusAutoItem.Des = CTL_DEF_CT_FOCUS_AUTO;//des FocusAutoItem.Last = CTL_DEF_CT_FOCUS_AUTO;//last #endif // vendor property page control configure TCorrectionItem.Min = CTL_MIN_EXTU_TRAPEZIUMCORRECTION;//min TCorrectionItem.Max = CTL_MAX_EXTU_TRAPEZIUMCORRECTION;//max TCorrectionItem.Res = CTL_RES_EXTU_TRAPEZIUMCORRECTION;//res TCorrectionItem.Def = CTL_DEF_EXTU_TRAPEZIUMCORRECTION;//def TCorrectionItem.Des = CTL_DEF_EXTU_TRAPEZIUMCORRECTION;//des TCorrectionItem.Last = CTL_DEF_EXTU_TRAPEZIUMCORRECTION;//last #ifdef _UVC_REALTEK_EXTENDEDUNIT_ // RtkExtISPSpecialEffectItem.Min = 0;//min RtkExtISPSpecialEffectItem.Max = CTL_MAX_RTKEXT_SPECIALEFFECT;//max RtkExtISPSpecialEffectItem.Res = 0;//res RtkExtISPSpecialEffectItem.Def = CTL_DEF_RTKEXT_SPECIALEFFECT;//def RtkExtISPSpecialEffectItem.Des = CTL_DEF_RTKEXT_SPECIALEFFECT;//des RtkExtISPSpecialEffectItem.Last = CTL_DEF_RTKEXT_SPECIALEFFECT;//last RtkExtEVCompensationItem.Min = CTL_MIN_RTKEXT_EVCOMP;//min RtkExtEVCompensationItem.Max = CTL_MAX_RTKEXT_EVCOMP;//max RtkExtEVCompensationItem.Res = CTL_RES_RTKEXT_EVCOMP;//res RtkExtEVCompensationItem.Def = CTL_DEF_RTKEXT_EVCOMP;//def RtkExtEVCompensationItem.Des = CTL_DEF_RTKEXT_EVCOMP;//des RtkExtEVCompensationItem.Last = CTL_DEF_RTKEXT_EVCOMP;//last #ifdef _EXT_ISO_ENABLE_ RtkExtISOItem.Min = CTL_MIN_RTKEXT_ISO;//min RtkExtISOItem.Max = CTL_MAX_RTKEXT_ISO;//max RtkExtISOItem.Res = CTL_RES_RTKEXT_ISO;//res RtkExtISOItem.Def = CTL_DEF_RTKEXT_ISO;//def RtkExtISOItem.Des = CTL_DEF_RTKEXT_ISO;//des RtkExtISOItem.Last = CTL_DEF_RTKEXT_ISO;//last #endif #ifdef _SCENE_MODE_ RtkExtSceneModeItem.Min = SCENEMODE_AUTO;//min RtkExtSceneModeItem.Max = SCENEMODE_AUTO |SCENEMODE_MACRO //|SCENEMODE_PORTRAIT |SCENEMODE_SPORT |SCENEMODE_SNOW //|SCENEMODE_NIGHT |SCENEMODE_BEACH |SCENEMODE_SUNSET |SCENEMODE_CANDLELIGHT |SCENEMODE_LANDSCAPE //|SCENEMODE_NIGHTPORTRAIT |SCENEMODE_BACKLIT //|SCENEMODE_MANUAL ;//max RtkExtSceneModeItem.Res = SCENEMODE_AUTO;//res RtkExtSceneModeItem.Def = SCENEMODE_AUTO;//def RtkExtSceneModeItem.Des = SCENEMODE_AUTO;//des RtkExtSceneModeItem.Last = SCENEMODE_AUTO;//last #endif RtkExtROIModeItem.Min = CTL_MIN_RTKEXT_ROIMODE;//min RtkExtROIModeItem.Max = CTL_MAX_RTKEXT_ROIMODE;//max RtkExtROIModeItem.Res = CTL_RES_RTKEXT_ROIMODE;//res RtkExtROIModeItem.Def = CTL_DEF_RTKEXT_ROIMODE;//def RtkExtROIModeItem.Des = CTL_DEF_RTKEXT_ROIMODE;//des RtkExtROIModeItem.Last = CTL_DEF_RTKEXT_ROIMODE;//last #endif #if ((defined _UVC_REALTEK_EXTENDEDUNIT_) || (defined _UVC_1V5_)) ROIItem.Max.bmAutoControls = CTL_MAX_RTKEXT_ROI_AUTOFUNCTION; #endif g_bySnrImgDir = 0; } void SetBkBrightness(S8 sbySetValue) { #ifdef _LENOVO_JAPAN_PROPERTY_PAGE_ XBYTE[ISP_Y_OFFSET] = sbySetValue - 128; #else XBYTE[ISP_Y_OFFSET] = (U8)sbySetValue; #endif } void SetBkContrast(U8 bySetValue) { #ifdef _LENOVO_JAPAN_PROPERTY_PAGE_ U8 contrast; if (bySetValue >= ContrastItem.Def) { contrast = LinearIntp_Byte(ContrastItem.Def, CTL_DEF_PU_CONTRAST_STANDARD, ContrastItem.Max, CTL_MAX_PU_CONTRAST_STANDARD, bySetValue); } else { contrast = LinearIntp_Byte(ContrastItem.Def, CTL_DEF_PU_CONTRAST_STANDARD, ContrastItem.Min, CTL_MIN_PU_CONTRAST_STANDARD, bySetValue); } if(contrast >= CTL_DEF_PU_CONTRAST_STANDARD) { XBYTE[ISP_CONTRAST] = LinearIntp_Byte(CTL_DEF_PU_CONTRAST_STANDARD, g_byContrast_Def, CTL_MAX_PU_CONTRAST_STANDARD, 80, contrast); } else { XBYTE[ISP_CONTRAST] = LinearIntp_Byte(CTL_DEF_PU_CONTRAST_STANDARD, g_byContrast_Def, CTL_MIN_PU_CONTRAST_STANDARD, 16, contrast); } #else //heonel 2010-06-22 follow Dell V0.11 if(bySetValue >= 0x20) { XBYTE[ISP_CONTRAST] = LinearIntp_Byte(0x20, 0x20, ContrastItem.Max, 80, bySetValue); } else { XBYTE[ISP_CONTRAST] = LinearIntp_Byte(ContrastItem.Min, 16,0x20, 0x20, bySetValue); } #endif } void SetBkSaturation(U8 bySetValue) { U8 byTemp; #ifdef _LOWLIGHT_DYN_SATURATION_ bySetValue = (U8)(((U16)g_byCurSaturationRatio*bySetValue)>>7); #endif //heonel 2010-06-22 follow Dell V0.11 if(bySetValue >= 0x40) { byTemp = LinearIntp_Byte(0x40, 0x40, SaturationItem.Max, 255, bySetValue); } else { byTemp = LinearIntp_Byte(SaturationItem.Min, 0,0x40, 0x40, bySetValue); } XBYTE[ISP_U_GAIN] = byTemp; XBYTE[ISP_V_GAIN] = byTemp; #ifdef _DARK_MODE_ENABLE_ g_byLastUGain = XBYTE[ISP_U_GAIN]; g_byLastVGain = XBYTE[ISP_V_GAIN]; #endif } void SetBkHue (S16 swSetValue) { SetBkHueRT(swSetValue); } void SetGainParam(U16 wGain) { #ifdef _AF_STAT_I2C_OUT_ if (CUSFUNCA_AFI2COUT_EN == (g_byCusFuncAEn&CUSFUNCA_AFI2COUT_EN)) { VCM_Write_PATH(wGain); } else #endif { #ifdef _SENSOR_GAIN_EN_ SetSensorGain(wGain); #else if(wGain >= 64) { XBYTE[ISP_Y_GAIN] = LinearIntp_Byte_Bound(64, 0x80, GainItem.Max, 0xE0, wGain); } else { XBYTE[ISP_Y_GAIN] = LinearIntp_Byte_Bound(GainItem.Min, 0x40, 64, 0x80, wGain); } #ifdef _DARK_MODE_ENABLE_ g_byLastYGain = XBYTE[ISP_Y_GAIN]; #endif #endif } } #ifdef _LENOVO_JAPAN_PROPERTY_PAGE_ U8 MappingSharpness(U8 bySetValue, U8 byDef) { U8 bysharpness; if(bySetValue >= SharpnessItem.Def) { bysharpness = LinearIntp_Byte(SharpnessItem.Def, CTL_DEF_PU_SHARPNESS_STANDARD, SharpnessItem.Max, CTL_MAX_PU_SHARPNESS_STANDARD, bySetValue); } else { bysharpness = LinearIntp_Byte(SharpnessItem.Def, CTL_DEF_PU_SHARPNESS_STANDARD, SharpnessItem.Min, CTL_MIN_PU_SHARPNESS_STANDARD, bySetValue); } if(bySetValue >= CTL_DEF_PU_SHARPNESS_STANDARD) { bysharpness = LinearIntp_Byte(CTL_DEF_PU_SHARPNESS_STANDARD, byDef, CTL_MAX_PU_SHARPNESS_STANDARD, 255, bysharpness); } else { bysharpness = LinearIntp_Byte(CTL_DEF_PU_SHARPNESS_STANDARD, byDef, CTL_MIN_PU_SHARPNESS_STANDARD, 0, bysharpness); } return bysharpness; } #endif void SetGammaParam(U16 wSetValue) //bydir =0: normarl dir; 1: from lowlux to normal; 2: from noamal to lowlux { U8 i; U16 wX2, wY2; static U8 code gc_byYgammaMax[16]= {0,8,16,45,61,73,84,93,102,118,133,146,159,182,204,224}; // y = x^0.6 // Y gamma: y=x {0,8,16,24,32,40,48,56,64,80,96,112,128,160,192,224}; static U8 code gc_byYgammaMin[16]= {0,8,16,17,19,22,26,31,36,47,61,76,93,131,175,224}; // y=x^1.6 #ifdef _LENOVO_JAPAN_PROPERTY_PAGE_ U16 gamma; if (wSetValue>=GammaItem.Def) { gamma = LinearIntp_Word(GammaItem.Def, CTL_DEF_PU_GAMMA_STANDARD, GammaItem.Max, CTL_MAX_PU_GAMMA_STANDARD, wSetValue); } else { gamma = LinearIntp_Word(GammaItem.Def, CTL_DEF_PU_GAMMA_STANDARD, GammaItem.Min, CTL_MIN_PU_GAMMA_STANDARD, wSetValue); } for(i =0; i<16; i++) { if(gamma > CTL_DEF_PU_GAMMA_STANDARD) { wX2 = CTL_MAX_PU_GAMMA_STANDARD; wY2 = gc_byYgammaMax[i]; } else if (gamma < CTL_DEF_PU_GAMMA_STANDARD) { wX2 = CTL_MIN_PU_GAMMA_STANDARD; wY2 = gc_byYgammaMin[i]; } else { wX2 = CTL_MIN_PU_GAMMA_STANDARD; wY2 = gc_byYgammaMin[i]; } XBYTE[ISP_YGAMMA_P0+i] = ClipWord(LinearIntp_Word(CTL_DEF_PU_GAMMA_STANDARD, g_Ygamma[i], wX2, wY2, gamma), 0, 255); } #else for(i =0; i<16; i++) { if(wSetValue > GammaItem.Def) { wX2 = GammaItem.Max; wY2 = gc_byYgammaMax[i]; } else if (wSetValue < GammaItem.Def) { wX2 = GammaItem.Min; wY2 = gc_byYgammaMin[i]; } else { if (GammaItem.Def == GammaItem.Min) { wX2 = GammaItem.Max; wY2 = gc_byYgammaMax[i]; } else { wX2 = GammaItem.Min; wY2 = gc_byYgammaMin[i]; } } XBYTE[ISP_YGAMMA_P0+i] = ClipWord(LinearIntp_Word(GammaItem.Def, g_Ygamma[i], wX2, wY2, wSetValue), 0, 255); } #endif XBYTE[ISP_YGAMMA_SYNC] = 1; }
10-11
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值