首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

编程这么久, 它们了解多少(一)

不急,先看一些系统标准宏: 一、 ANSI C 标准宏 1、 ANSI C标准宏 __LINE__ // 在源代码中插入当前源代码行号 __FILE__ // 在源文件中插入当前源文件名 _...// 当要求程序严格遵循ANSI C标准时该标识被赋值为1 __cplusplus // 当编写C++程序时该标识符被定义 _WIN32 // 在程序运行在windows系统上被定义位1 linux...// 在程序运行在linux系统上被定义位1 __x86_64__ // 在程序运行在64位系统上被定义位1 __i386__ // 在程序运行在32位系统上被定义位1 __VA_ARGS...test = 1; printf("__func__:%s\n", __func__); printf("__FILE__:%s\n", __FILE__); printf("__LINE...__:%d\n", __LINE__); printf("__DATE__:%s\n", __DATE__); printf("__TIME__:%s\n", __TIME__);

44210

IIC设备驱动实例调试

简介: 在应用到linux的设备(特别是手机)中,大部分硬件设备与主芯片都是通过iic通讯的,譬如TP、加速度传感器、温湿度传感器等等。...记录一次自己调试linux开发板iic器件(ap3216c光敏设备)。 概述: iic通讯线一般只有两条,一条用于时钟控制,一条用于数据通讯。当然也存在单总线通讯,像单片机经常用到的ds18b20。...撸码: 1详细信息: 平台:imx6ull开发板 linux版本:4.9.88 开发编辑器:gediit 2概要: 在linux源码中,已经实现了iic主机通讯协议传输的各种传输接口。...具体原理可查阅代码include/linux/i2c.h。...对于使用过单片机调试iic设备的同学,对于iic通讯应该很熟悉了,主要就是对linux驱动注册流程稍加研究即可。

1.3K20

合法修改只读数据

1.开场白 环境: 处理器架构:arm64 内核源码:linux-5.11 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 对于Linux程序员来说,我们都知道一个事实...我们查看test可执行文件的程序头表: $ aarch64-linux-gnu-readelf -l test Elf file type is DYN (Shared object file) Entry...那么arm64处理器将发生转换表错误的异常(实际上,如果先读只读数据,就像代码中写那样,那么就首先建立了只读数据的虚拟页和物理页的页表映射,然后再次进程写访问的时候,就会发生访问权限错误的异常),将进入linux...; printf(" &buf:%p\n",__LINE__, buf); printf(" Print out buf content ---->\n", _..._LINE__); puts(buf); #if 1 /***************************ioctl call driver**************************

1.1K20

【嵌入式】C语言程序调试和宏使用的技巧

调试相关的宏 在Linux使用gcc编译程序的时候,对于调试的语句还具有一些特殊的语法。...具体宏如下: __FILE__ 当前程序源文件 (char*) __FUNCTION__ 当前运行的函数 (char*) __LINE__ 当前的函数行 (int) 这些宏不是程序代码定义的,而是有编译器产生的...printf("file: %s\n", __FILE__); printf("function: %s\n", __FUNCTION__); printf("line: %d\n", __LINE...) \ printf("file:%s function: %s line: %d "fmt, \ __FILE__, __FUNCTION__, __LINE_...一般可以利用配置文件的方式显示,其实Linux内核也是这么做的,它把调试的等级分成了7个不同重要程度的级别,只有设定某个级别可以显示,对应的调试信息才会打印到终端上。

62710

【Android 逆向】Android 进程注入工具开发 ( 远程进程注入动态库文件操作 | 注入动态库 加载 业务动态库 | 业务动态库启动 | pthread_create 线程开发 )

/debug/libnative.so 动态库 , 加载完成后调用动态库的 invoke 方法 */ int load() { LOGW("%s(%d):%s\n", __FILE__, __LINE...dlopen("/data/system/debug/libnative.so", RTLD_GLOBAL); LOGW("%s(%d):%s handle=%p\n", __FILE__, __LINE...获取启动函数 invoke 的地址 */ void* invoke = dlsym(handle, "invoke"); LOGW("%s(%d):%s invoke=%p\n", __FILE__, __LINE...\n"); return; } } 在 Linux C 中 , 启动线程很简单 , 准备一个线程函数 , 然后调用 pthread_create 系统接口 , 即可启动一个线程 , 线程中执行...线程函数 ; 三、 pthread_create 线程开发 ---- 关于 Linux C 中线程开发 , 参考 【Android NDK 开发】JNI 线程 ( JNI 线程创建 | 线程执行函数

73720
领券