
C
ambercctv
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
IT K2GEVM 开发板综合使用串口和LED的程序框架
TI EVMK2G 开发板上跑马灯和串口输出的完整例子开发板上2个LED0和LED1的管脚分布使用串口初始化并设置LED0 &1 为输出创建任务开发板上2个LED0和LED1的管脚分布LED0 使用了GPIO port 0的第108 PINLED1 使用了GPIO port 1的第11PIN使用串口使用配置文件装入UART驱动,和BOARD.h/* Load the uart package */var Uart = xdc.useModule(‘ti.drv.uart.Settin原创 2021-05-05 16:43:00 · 306 阅读 · 0 评论 -
xdc.useModule 和 xdc.loadPackage 两个函数使用心得
xdc.useModule的对象是文件夹下的具体某一个文件的名字,比如$BIOS_INSTALL_DIR\packages\ti\sysbios\knl\(Task,Swi,Event,Queue...)则在cfg文件中可以这样导入var Task = xdc.useModule('ti.sysbios.knl.Task');xdc.loadPackage的对象一般是文件夹,比如$PDK_INSTALL_DIR\ti\drv\i2c,$PDK_INSTALL_DIR\ti\drv\mcasp则.原创 2021-04-26 22:21:06 · 557 阅读 · 0 评论 -
TI CCS初体验
1. SYS/BIOS 和RTOS一般是一个东西2. RTOS和RTSC一般也是一个东西,RTSC是Real Time Software Component的简写3.RTSC使用package的方式组织不同的软件模块,创建RTSC工程时必须指定target和platfrom这2个变量,target类似Linux中CPU=? ,platform类似BOARD=?4. RTSC必须要用xxx.cfg文件,作用有些类似python的import os,import sys 。。。。...原创 2021-04-10 20:42:48 · 753 阅读 · 0 评论 -
x86平台编译和安装新的内核
make-kpkg的安装包是kernel-package,sudo apt-get install kernel-package使用make-kpkg编译内核,第一个步骤“配置内核”还是必不可少的,在这里,我比较建议在发行版默认的config的基础上再进行配置,这样配置出的内核和发行版本身才会有更好的相容性。比如Ubuntu 10.10,可以在运行“make menuconfig”之前执行命令“cp /boot/config-2.6.35-24-generic .config”,或者在menuco.原创 2020-05-14 20:36:23 · 357 阅读 · 0 评论 -
meson+ninja build系统,使用meson & ninja 编译C工程
1.什么是meson2meson和eclipse集成原创 2020-05-14 20:19:01 · 6344 阅读 · 0 评论 -
使用glNormal3f法向量绘制立方体
#if 0#include <GLFW/glut.h>GLfloat light_diffuse[] = { 1.0, 0.0, 0.0, 1.0 }; /* Red diffuse light. */GLfloat light_position[] = { 0.0, 0.0, 5.0, 0.0 }; /* Infinite light location. */GLu...原创 2020-04-30 20:24:32 · 1521 阅读 · 0 评论 -
Setup VS2017 for GLUT,使用VS2017 和GLUT 运行opengl程序
//https://elixir.bootlin.com/linux/v5.6/source//https://www.absingh.com/opengl///https://www.opengl.org/resources/libraries/glut/glut_downloads.php原创 2020-04-21 19:59:33 · 223 阅读 · 0 评论 -
glRasterPos2i 和 glBitmap绘制位图
openGL中绘制位图时,首先要调用glRasterPos2i设置光栅绘图的起点位置,glBitmap中的xorig和yorig指向光栅的起点而glBitmap中的xMove和yMove表明下次绘图时光栅移动的距离。#if 1#include <GLFW/glut.h>#include <stdlib.h>GLubyte rasters[24] = ...原创 2020-04-19 21:45:23 · 1974 阅读 · 0 评论 -
openGL中坐标的生成:glLoadIdentity和gluOrtho2D练习
void display() { glEnable(GL_DEPTH_TEST); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //gluOrtho2D(0, 800, 0, 800); glLi...原创 2020-04-18 09:05:49 · 455 阅读 · 0 评论 -
霍夫曼(Huffman)编码学习总结
霍夫曼编码基于字符的出现频率实现长度最小的变长编码(VLC),jpeg图片中使用Huffman 编码实现图片大小压缩。编码过程基本步骤:1)扫描待编码字串,计算每个包含字符的出现概率,按从小到大排列构成链式结构。2)自底向上构造Huffman Tree3)按照字符在树中的路径写出编码(0->Left, 1->Right)解码过程基本步骤:1)逐字读入待解码...原创 2020-01-19 20:46:41 · 1665 阅读 · 0 评论 -
BMP文件格式学习总结
一个BMP文件可以包含4部分1,文件头是14字节长的数据结构,定义如下:typedef struct _BFHEADER{ unsigned short magic; unsigned int size; unsigned int reserved; unsigned int bitOffset;}bfHeader;2.bmp 信息结构,结构定义...原创 2019-12-09 21:40:13 · 328 阅读 · 0 评论 -
POSIX 标准原文
https://pubs.opengroup.org/onlinepubs/9699919799/nframe.html转载 2019-10-29 09:23:20 · 1438 阅读 · 0 评论 -
使用USB gadget驱动测试USB芯片驱动功能
在内核中使能Mass Storage Gadget ,如下图,配置路径是Linux/arm64 4.14.0 Kernel Configuration→ Device Drivers → USB support → USB Gadget Support ->Mass Storage Gadget使能Pseudo文件系统,如图配置Device Tree&dwc3_0 {...原创 2018-09-21 14:52:28 · 1307 阅读 · 0 评论 -
backtrace和backtrace_symbols函数的使用
在看libdrm库函数的时候想看看哪些函数调用了drmIoctl函数 对drmIoctl做了简单修改,调用了print_trace函数/** * Call ioctl, restarting if it is interupted */intdrmIoctl(int fd, unsigned long request, void *arg){ int ret; ...原创 2018-09-12 20:49:33 · 4067 阅读 · 0 评论 -
嵌入式软件开发调试的3个阶段,技术和方法
层次1:BringUP 在单板BringUp阶段使用JTAG调式。大多数芯片厂家IDE都支持tcl脚本语言,tcl语言可以控制jtag读取基本的Register,memory,download等,使用jtag可以完成对pll,ddr等的初始化化配置,进而下载程序到ddr中调试等。 层次2:内核和驱动调试 主要使用printf和LED进行调试,其次还有一些工具软件如i2c-tool,spite...原创 2018-09-08 21:48:29 · 3890 阅读 · 0 评论 -
Yocto Cross-Development Toolchain,YOCTO aarch64交叉编译器
https://www.yoctoproject.org/docs/2.5.1/sdk-manual/sdk-manual.html#the-cross-development-toolchainhttp://downloads.yoctoproject.org/releases/yocto/yocto-2.5.1/buildtools/原创 2018-08-25 15:58:42 · 1533 阅读 · 0 评论 -
VxWorks使用socket函数时Fd的分配问题?
最近在学习VxWorks的socket实现的部分,发现用tcp创建socket时每次用connect时server端分配的fd都是上一个fd+1.,断开链接时fd好像没有被释放ipnet_ip4_sendto,sock->fd=17,pkt->fd=17param.sock=0x1624000,srcport=61162,dstport=50000ipnet_ip4_s...原创 2018-04-28 20:32:19 · 650 阅读 · 0 评论 -
C语言进行嵌入式设计的几点经验总结
静态分配变量地址好于堆分配的变量地址,堆分配地址好于栈分配变量,尤其是‘大’的变量,例如: 1. static unsigned int Table[10]; 2. unsignded int *p=malloc(sizeof(int)*10) 3. void func(void) { unsigned int table[10]; //T...原创 2018-04-09 19:29:04 · 307 阅读 · 0 评论 -
read和fread以及write和fwrite的差别
两组函数的差别从名字就可以看出来,主要还是实现方式的不同。 fread和fwrite是经过系统一层操作,而文件系统一般是块设备,会对数据进行缓存,然后最终会调用的read和write。read和write是基于设备的操作,无文件系统缓存,是最底层的IO。 下图展示了两组函数的区别。 由于实现方式的不同,性能和使用场合都不同。...原创 2018-03-28 16:35:27 · 1937 阅读 · 1 评论 -
GCC内联汇编(inline assembly )的几个例子
https://gcc.gnu.org/onlinedocs/gcc/index.html#SEC_Contentsint __ffs (int x){ int cnt; int tmp; asm ("bsfl %2,%0\n" /* Count low bits in X and store in %1. */ "cmovel %1,%0\n"...原创 2018-03-22 10:40:54 · 1657 阅读 · 0 评论 -
realloc函数,内存再分配
realloc是C库提供的函数,用于动态分配新的内存地址,其原型是: void* realloc (void* ptr, size_t size); ptr:由malloc,calloc或realloc分配的地址 size:需要申请内存大小,单位为byte当ptr==NULL时,realloc作用和malloc一样当newSize》size时,realloc可能在原有内存的地址处扩展...原创 2018-03-19 16:02:33 · 450 阅读 · 0 评论 -
GCC中MAX和MIN的安全定义
#define MAX(a,b) ({ typeof(a) _a = (a); typeof(b) _b = (b); \ _a > _b ? _a : _b; })#define MIN(a,b) ({ typeof(a) _a = (a); typeof(b) _b = (b); \ _a < _b ? ...原创 2018-03-16 15:09:44 · 1361 阅读 · 0 评论 -
数据结构:单向链表的C语言实现
头文件typedef struct _slnode{ struct _slnode *pNext;}SL_NODE;typedef struct slLIST{ SL_NODE *head; SL_NODE *tail; int count;}SLL;typedef struct _sl_data{ SL_NODE nod...原创 2018-03-14 15:13:48 · 274 阅读 · 0 评论 -
一个哈希表Hash Table的例子,用于IPv4协议的IP地址查找
头文件typedef struct ip4_addr_key{ unsigned int ifindex; unsigned int addr; unsigned short vr;}ip4AddrKey;typedef unsigned int (*hash_obj)(...原创 2018-03-13 09:38:00 · 1674 阅读 · 0 评论 -
高效C语言编程,状态机表示
使用位表示状态!! 比较一下两种方法,哪个实现代码更高效呢??enum MotorStatus { INVALID, UNCALIBRATE, DISABLE, STANDBY, MOVE, STOP, EMERSTOP, MAX };void MTStateFsm(void) {enum Moto原创 2018-01-24 09:17:27 · 731 阅读 · 0 评论 -
LUA脚本调用C函数的方法
LUA脚本调用C函数是非常方便的,需要在C文件里首先实现好C的函数,然后把C函数和lua的调用名注册到一个库里。下面的例子是lua脚本调用test.output然后会最终调用到C函数Test_output.#include #include #include #define ltestlib_c#define LUA_TEST_LIB#include "原创 2017-11-13 14:39:02 · 1204 阅读 · 0 评论 -
C中的popen函数和Python中Popen方法
mingw中popen的声明如下(stdio.h):_CRTIMP __cdecl __MINGW_NOTHROW FILE * popen (const char *, const char *);_CRTIMP __cdecl __MINGW_NOTHROW int pclose (FILE *);调用例子#include <stdio.h>#in...原创 2018-04-22 08:46:29 · 1202 阅读 · 0 评论 -
C语言实现递归加法和递归阶层
unsigned int sum(unsigned int n){ int tmp; if(n==0) return 0; else { tmp=n+sum(n-1); printf("tmp=%d\n",tmp); } return tmp;}unsigned int mul(unsigned...原创 2018-04-12 20:00:11 · 1318 阅读 · 0 评论 -
VxWorks IP协议栈是如何实现灵活的添加包头和数据的?
VxWorks IPNET协议栈提供了5个函数用于在分配包头的空间和包尾的空间,可以帮助理解这种功能是如何实现的。pkt * ipcom_pkt_malloc(int size,int flag) //size=sizeof(IP_HEADER)+sizeof(TCP)+sizeof(payLoad) but except for linklayer headervoid* i...原创 2018-04-19 19:14:00 · 739 阅读 · 0 评论 -
二分查找(Binary Search, Bin Search)的C语言实现
二分查找需要对数组进行从小到大的排列。 这里展示了递归实现和循环实现2种方法。#include <stdio.h>void Bsearch(int list[], int low, int high, int key);int binSearch(int list[], int n, int key);void bubble_sort(int list[], int);...原创 2018-04-21 09:47:15 · 1878 阅读 · 0 评论 -
链式结构堆栈,Listed-Stack
#include<stdio.h>#include<stdlib.h>typedef struct liststack{ int value; struct liststack *pNext;}L_STACK;L_STACK *pLStack=NULL;L_STACK* pushInt32(L_STACK *pHead,int value)...原创 2018-04-09 21:41:35 · 225 阅读 · 0 评论