常用小函数

打印功能

print_int(“value:”,12344,‘D’);

void print_int(char *str, unsigned int ivalue, char format)
{
    
    
	char buf[11] = {
    
    0};
	unsigned int range ,i ,temp_val;
	
	printf("%s", str);
	if (ivalue == 0) {
    
    
		printf("0x00\n");
		return;
	}
	switch (format) {
    
    
	case 'D' :
		 range = 1000000000;
		i = 0;
		for(;;)
		{
    
    
			temp_val = ivalue/ range;
			if (temp_val != 0) {
    
    
				break;
			}
			ivalue = ivalue % range;
			range = range / 10;
		}
		for(;;)
		{
    
    
			temp_val = ivalue/ range;
			buf[i++] = temp_val + '0';
			if (range == 1) {
    
    
				break;
			}
			ivalue = ivalue % range;
			range = range / 10;
		}
		break;
	case 'X' :
	    range = 0x10000000;
		i = 0;
		for(;;)
		{
    
    
			temp_val = ivalue/ range;
			if (temp_val != 0) {
    
    
				break;
			}
			ivalue = ivalue % range;
			range = range / 16;
			
		}
		for(;;)
		{
    
    
			temp_val = ivalue/ range;
			if (temp_val > 9) {
    
    
				buf[i++] = temp_val % 10 + 'A';
			} else {
    
    
				buf[i++] = temp_val + '0';
			}
			if (range == 1) {
    
    
				break;
			}
			ivalue = ivalue % range;
			range = range / 16;
			
		}
		printf("0X");
		break;
	default:
		printf("errp\n");
	}
	printf("%s\n", buf);
}

定义内核的寄存器结构

通过union访问其比特位
struct pwm_reg_info {
    
    
	union{
    
    
		unsigned int pwm_ctr;
		struct {
    
    
			unsigned int cycle:16;
			unsigned int type:1;
			unsigned int ms_dir:1;
			unsigned int reserve1:2;
			unsigned int ms_threshold_en:1;
			unsigned int reserve2:3;
			unsigned int ms_threshold_val:7;
			unsigned int reserve3:1;
		}ctr_bit;
	};
	unsigned int pwm_period;
};
struct pwm_info {
    
    
	unsigned int  __iomem *pwm_reg_base;
	struct pwm_reg_info *pwm_n_reg;
	
};

Guess you like

Origin blog.csdn.net/weixin_41884251/article/details/121151257