extern

AliOS-Things ESP8266 配网 学习

三世轮回 提交于 2020-01-18 08:02:49
AliOS-Things ESP8266 配网 学习 1、环境搭建 2、流程 1、环境搭建 参考官网 2、流程 确认流程通过浏览源码、增加打印以及查看打印来确认,如果遇到乐鑫SDK的函数,不作详细说明。 platform\mcu\esp8266\bsp\entry.c static kinit_t kinit = { . argc = 0 , . argv = NULL , . cli_enable = 1 } ; static void app_entry ( void * arg ) { aos_components_init ( & kinit ) ; # ifndef AOS_BINS application_start ( kinit . argc , kinit . argv ) ; /* jump to app/example entry */ # endif } extern uart_dev_t uart_0 ; extern hal_wifi_module_t aos_wifi_esp8266 ; void user_init ( void ) { int ret = 0 ; extern int32_t hal_uart_init ( uart_dev_t * uart ) ; extern void key_gpio_init ( void ) ; key

c语言基础----函数

廉价感情. 提交于 2020-01-17 21:36:14
函数定义 dataType functionName(){ //body } dataType 是返回值类型,它可以是C语言中的任意数据类型,例如 int、float、char 等。 functionName 是函数名,它是 标识符 的一种,命名规则和标识符相同。函数名后面的括号 ( ) 不能少。 body 是函数体,它是函数需要执行的代码,是函数的主体部分。即使只有一个语句,函数体也要由 { } 包围。 如果有返回值,在函数体中使用 return 语句返回。return 出来的数据的类型要和 dataType 一样。 内联函数 要将一个函数定义为内联函数,需要在函数定义时加上 inline 函数修饰符。关键字 inline 告诉编译器,任何地方只要调用内联函数,就直接把该函数的机器码插入到调用它的地方。这样程序执行更有效率,就好像将内联函数中的语句直接插入到了源代码文件中需要调用该函数的地方一样。 inline 修饰符并非强制性的:编译器有可能会置之不理。例如,递归函数通常不会被编译成内联函数。编译器有权自行决定是否要将有 inline 修饰符的函数编译成内联函数。 和其他函数不同的是,在每个用到内联函数的翻译单元中,都必须重复定义这个内联函数。编译器必须时刻准备好该函数定义,以便在调用它时及时插入内联代码。因此,经常在头文件中定义内联函数。

Lua调用c++ DLL 文件

六月ゝ 毕业季﹏ 提交于 2020-01-15 07:04:17
尽管网上类似的例子不少,但是对于很多新手来说,有些问题并没有说的那么详细 直奔主题 在此,我会列出我参考的文章,有些东西就直接复制的 环境:Visual C++ 2008 Express Edition + Lua 1.5 + SciTE(lua编辑器) 下载 Visual C++ 2008 Express Edition + Lua ,下载后安装,省略N字。 环境配置: 1.打开Visual C++ 2008(后面简称VC2008),新建一个C++ project,File->New Project->Empty Project,在Name栏输入工程名,然后OK. 2.设置生成DLL文件,右键工程名,Properties->Configuration Properties->General->Configuration Type->选择Dynamic Library(.dll) 3.设置C/C++、Lua。C/C++->General->Additional Include Directories->选择Lua的安装路径下的include,我Lua安装在"C:\Program Files\Lua",我的完整路径:"C:\Program Files\Lua\5.1\include"。 4.设置Linker:Linker->General->Additional Library

Alias for function

不想你离开。 提交于 2020-01-14 07:55:28
问题 I want to import some functions from kernel32.dll, but I want to use different names. Example function: [DllImport("kernel32.dll")] private static extern bool ReadProcessMemoryProc64 (...); private static bool BetterReadableAndWriteableName (...) { ReadProcessMemoryProc64(...); } Wrapping the function is what I actually don't want, if there is another way. 回答1: Use the EntryPoint property of DllImportAttribute. [DllImport("kernel32.dll", EntryPoint="ReadProcessMemoryProc64")] private static

.net线程同步

我是研究僧i 提交于 2020-01-14 02:11:50
  大家都晓得.NET中线程同步有以下几种方式:   临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)   1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。   2、互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享   3、信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目   4、事 件: 通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作   临界区    Interlocked:为多个线程共享的变量提供原子操作   此类的方法可以防止可能在下列情况发生的错误:计划程序在某个线程正在更新可由其他线程访问的变量时切换上下文;或者当两个线程在不同的处理器上并发执行时。 此类的成员不引发异常。 那么问题来了,为什么是原子级

Linux字符串函数集

戏子无情 提交于 2020-01-11 22:31:51
//Linux字符串函数集: 头文件:string.h   函数名: strstr   函数原型: extern char *strstr( char *str1, char *str2);   功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。   返回值:返回该位置的指针,如找不到,返回空指针。 包含文件:string.h   函数名: strstr   函数原型:extern char *strstr(char *str1, char *str2);   功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。   返回值:返回该位置的指针,如找不到,返回空指针。 原型: extern char *strchr( const char *s, char c);    const char *strchr( const char* _Str, int _Val)    char *strchr( char* _Str, int _Ch)   头文件:#include <string.h>   功能:查找字符串s中首次出现字符c的位置   说明:返回首次出现c的位置的指针,如果s中不存在c则返回NULL。   返回值:Returns the address of the first occurrence of

C# 挂起 进程 PostMessage使用

不羁岁月 提交于 2020-01-11 14:46:47
#region 暂停进程 //检测进程是否存在 public List<IntPtr> get_pressId(string pressName = "explorer") { List<IntPtr> list = new List<IntPtr>(); //获得进程ID Process[] processes = Process.GetProcesses(); foreach (Process process in processes) { if (process.ProcessName == pressName) { list.Add(process.Handle); } } return list; ////挂起进程 //NtSuspendProcess(ip); ////恢复 //NtResumeProcess(ip); } [DllImport("ntdll.dll")] private static extern uint NtSuspendProcess([In] IntPtr processHandle); [DllImport("ntdll.dll")] private static extern uint NtResumeProcess([In] IntPtr processHandle); #endregion /// <summary> /// js c

gcc和g++的区别以及extern \"C\"的作用

痴心易碎 提交于 2020-01-11 09:13:29
首先来写一个简单的c代码~ 1 //externC_funA.c2 void funA()3 {} 利用gcc进行编译生成汇编: gcc -c externC_funA.c -S 得到的汇编代码如下: 1 .file "externC_funA.c" 2 .text 3 .globl funA //注意这里的标示符为funA 4 .type funA, @function 5 funA: 6 pushl %ebp 7 movl %esp, %ebp 8 popl %ebp 9 ret10 .size funA, .-funA11 .ident "GCC: (GNU) 4.3.0 20080428 (Red Hat 4.3.0-8)"12 .section .note.GNU-stack,"",@progbits 同样的,我们将该文件改为cpp后缀,重新编译 1 //externC_funA.cpp2 void funA()3 {} gcc -c externC_funA.cpp -S g++ -c externC_funA.cpp -S 按照上面两种方法编译,得到的汇编代码一样 1 .file "externC_funA.cpp" 2 .text 3 .globl _Z4funAv//注意这里的标示符为_Z4funAv,不同形参版本的funA生成的标示符会不一样! 4 .type

C#调用Win32 的API函数--User32.dll

☆樱花仙子☆ 提交于 2020-01-11 08:31:37
Win32的API函数是微软自己的东西,可以直接在C#中直接调用,在做WinForm时还是很有帮助的。有时候我们之直接调用Win32 的API,可以很高效的实现想要的效果。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace WindowsAPI { class CSharp_Win32Api { #region User32.dll 函数 /// <summary> /// 该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,以后可以在GDI函数中使用该句柄来在设备上下文环境中绘图。hWnd:设备上下文环境被检索的窗口的句柄 /// </summary> [DllImport( " user32.dll " , CharSet = CharSet.Auto)] public static extern IntPtr GetDC(IntPtr hWnd); /// <summary> /// 函数释放设备上下文环境(DC)供其他应用程序使用。 /// </summary> public static extern int ReleaseDC(IntPtr

GCC __builtin_expect的作用

ぃ、小莉子 提交于 2020-01-10 09:08:32
https://blog.csdn.net/shuimuniao/article/details/8017971 #define LIKELY(x) __builtin_expect(!!(x), 1) //x很可能为真 #define UNLIKELY(x) __builtin_expect(!!(x), 0) //x很可能为假 CurrentThread.h namespace CurrentThread { // internal extern __thread int t_cachedTid; extern __thread char t_tidString[32]; extern __thread int t_tidStringLength; extern __thread const char* t_threadName; void cacheTid(); inline int tid() { if (__builtin_expect(t_cachedTid == 0, 0)) { cacheTid(); } return t_cachedTid; } inline const char* tidString() // for logging { return t_tidString; } inline int tidStringLength() // for