unsigned

JZ2440裸机点亮LED【学习笔记】

痞子三分冷 提交于 2020-01-30 05:45:23
平台:jz2440 作者:庄泽彬 (欢迎转载,请注明作者) 说明:韦东山一期视频学习笔记 一、我们首先来做第一个实验,用汇编语言点亮板子上的LED。 1.1 LED的原理图 从下面的原理图可知LED1是连接到芯片的GPF4 1.2 相关的GPIO寄存器的配置 我们要点亮LED,就要把相关的端口配置成输出口,并且输出低电平。看看芯片手册,要GPF4输出低电平要配置GPFCON寄存器设置相应的位位01即为输出状态,在配置GPFDAT相应的位为0即可输出低电平。 1.3相关代码: led_on.S文件 1 .text 2 .global _start 3 _start: 4 LDR R0,=0x56000050 @ 设置R0为GPFCON寄存器 5 @ 用于配置端口的输入、输出状态 6 7 mov R1,#0x00000100 8 str R1,[R0] @ 设置GPF4端口为输出口 9 10 ldr R0,=0x56000054 @ 设置R0为GPFDAT寄存器 11 @ 用于配置端口输出的高低电平 12 13 mov R1,#0x00000100 14 str R1,[R0] @ 输出低电平 15 16 MAIN_LOOP: 17 B MAIN_LOOP Makefile文件 1 led_on.bin:led_on.S 2 arm-linux-gcc -g -c -o led_on

S3C2440-裸机篇-08 | 使用S3C2440操作SDRAM(配置内存控制器)

删除回忆录丶 提交于 2020-01-30 03:09:13
1. 前言 提起SDRAM,大家都会觉得太难了,要编程写出SDRAM的控制时序更是难上加难,对的,没错!一年前我也是这样想的,学习这一节内容的时序觉得非常难,视频看了好几遍不太懂,对于SDRAM的控制原理更是没看懂,一年后回过头来再看视频,茅塞顿开,看不懂的原因是因为:我自己把它想的太难了,其实, 它很简单,总共也就5行代码,设置5个寄存器即可 。 简单的原因要归功于S3C2440内部的内存控制器,它的作用就是 负责向外部扩展的存储类设备提供控制信号 ,所以当CPU要去访问属于SDRAM时,只需要去访问属于SDRAM的映射地址即可,内存控制器会发出信号,控制时序去和SDRAM打交道,写入数据或者是读出数据。 尽管我们不用手写操作时序了,我们仍然要 编写程序去控制时序 。 因为S3C2440的内存控制器是普遍的,不可能只能接一种SDRAM芯片,而是所有的SDRAM芯片都可以接,但是 不同厂商的SDRAM芯片性能有差异 ,也就是说,虽然所有SDRAM芯片的控制时序都一样,但是A厂商生产的SDRAM芯片在发出控制信号之后70ns之后才有数据,B厂商生产的SDRAM芯片在发出控制信号后60ns就有有效数据,这就叫做不同的SDRAM芯片的性能不同。 所以内存控制器设置了一些寄存器, 允许用户根据实际接的SDRAM芯片性能去配置具体的时间参数即可 ,称之为SDRAM初始化或者内存控制器初始化

opencv:Mat对象

天涯浪子 提交于 2020-01-30 01:32:13
Mat对象:图像文件的内存数据对象 读取为 Mat 对象 读取图像位Mat对象,获取图像的相关信息 #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main(int argc, char** argv) { Mat src = imread("f:/temp/images/lena.jpg", IMREAD_GRAYSCALE); if (src.empty()) { printf("Could not find the image!\n"); return -1; } namedWindow("002-demo", WINDOW_AUTOSIZE); imshow("002-demo", src); // 获取图像的宽度 int width = src.cols; // 获取图像的高度 int height = src.rows; // 获取图像的通道数 int dim = src.channels(); int depth = src.depth(); int type = src.type(); if (type == CV_8UC1) { printf("type:CV_8UC1\n"); } //

C语言基础

北城以北 提交于 2020-01-29 19:52:51
文章目录 语法 算法描述 关键字 标识符 数据类型 常量 基础 转义字符 变量 整形变量 基本 无符号 实型变量 字符变量 存储类别 auto static 在函数内部使用 在函数外部使用 register extern 运算符 逻辑运算符 位运算符 语句 输出 putchar() puts() printf() 举例使用 格式字符 附加格式 输出两位小数 左顶格 输入 getchar() gets() scanf() 举例使用 选择结构 if-else 条件运算符 switch 循环结构 while() do-while for 转移语句 goto break continue 数组 一维数组 初始化 引用 二维数组 初始化 字符串 引入字符串的标准库 基本函数 字符串复制 字符串连接 字符串比较 获得字符串长度 函数 函数的定义 函数的声明 内外部函数 内部函数 外部函数 局外部变量 局部变量 全局变量 指针 地址与指针 指针变量 基本 赋值 结构体 声明 位运算 宏定义 文件 语法 算法描述 自然语言 流程图 N-S流程图 关键字 标识符 可由字母,数字,下划线组成。 数字不能开头 数据类型 常量 基础 数值型常量 整型常量 和实型常量 字符型常量 字符型常量和字符串常量 符号常量 根据define 来定义 转义字符 \n 回车 \t tab,制表符 \b 退格 \r 回车

重温网络编程——常识(三)

自作多情 提交于 2020-01-29 02:03:20
前言 关于一些网络编程的常识整理。 正文 1.网络数据传输到我们的计算机,是如何知道传输给那个应用? 通过端口,所以端口也是不能重复占用的。 下面是sockaddr_in 的定义: typedef struct sockaddr_in { #if(_WIN32_WINNT < 0x0600) short sin_family; #else //(_WIN32_WINNT < 0x0600) ADDRESS_FAMILY sin_family; #endif //(_WIN32_WINNT < 0x0600) USHORT sin_port; IN_ADDR sin_addr; CHAR sin_zero[8]; } SOCKADDR_IN, *PSOCKADDR_IN; 1.sin_family 设置的为地址族 2.sin_port 为端口号,16位也就是两个字节,所以端口范围是1-65535,其中1-1000是系统保留的端口号,但是并不是我们不能用,只是最后不用。 1024-5000: BSD临时端口,一般的应用程序使用1024到4999来进行通讯; 5001-65535: BSD服务器(非特权)端口,用来给用户自定义端口. ip 地址的定义 typedef struct in_addr { union { struct { UCHAR s_b1,s_b2,s_b3,s_b4;

第15课.Nor Flash

混江龙づ霸主 提交于 2020-01-28 15:40:26
1.Nor Flash与Nand Flash的对比 a.Nor Flash的块大小范围为64kb,128kb:Nand Flash的块大小范围为8kb,64kb,擦/写一个Nor Flash块需4s,而擦/写一个Nand Flash块仅需2ms b.Nand Flash一般以512字节为单位进行读写。这使得Nor Flash适合运行程序,而Nand Flash更适合于存储数据 c.容量相同的情况下,Nand Flash的体积更小。Nor Flash的容量通常为1MB~4MB(也有32M的Nor Flash),Nand Flash的容量为8MB~512MB d.在Nor Flash上常用jffs2文件系统,而在Nand Flash常用yaffs文件系统。在更底层,有MTD驱动程序实现对他们的读,写,擦除操作。它也实现了EDC/ECC校验 e.这里用的Nor里面有4个bank,每个bank里面有若干block(擦除大小),不同bank里面的block可能不一样 2.引脚接口 2440的A1接到Nor的A0,所以2440发出(555h<<1)(左移一位),Nor才能收到555h这个地址 3.NOR FLASH的命令 解析: Read Mood:先发送地址,然后就有数据得到和正常的读内存是一样的 Reset Mood:往任意地址写0xF0都退出特殊模式 读ID:Nor

基于树莓派的智能安全门(单片机)

浪尽此生 提交于 2020-01-28 04:41:52
原文链接: https://shumeipai.nxez.com/2017/03/10/raspberry-pi-diy-cool-security-door.html 先用单片机+薄膜键盘做密码键盘的输入,通过串口把获取到的按键值发给树莓派去识别和操作。这里用了#号键作为密码输入结束的确定键。单片机程序和树莓派程序调通后,打印外壳,焊板子(因为体积关系不可能直接塞个直插封装的单片机下去,所以就买了比较方便焊接体积又相对小的DIP封装的单片机,这里用了STC15系列的单片机,可以省掉晶振的焊接) 单片机读键盘数据的代码如下(单片机使用的是STC15W404AS型号) ​ #include "STC15W404AS.h" #include <intrins.h> #define key_port P1 //键盘接口定义 sbit key_port_0=key_port^0; sbit key_port_1=key_port^1; sbit key_port_2=key_port^2; sbit key_port_3=key_port^3; sbit BEEP=P5^5; //蜂鸣器 sbit OPEN=P5^4; //开门按键 /******************************* STC15W404单片机一毫秒延时函数 **************************

字符设备驱动程序

。_饼干妹妹 提交于 2020-01-28 03:42:22
在这里首先需要说明,这一系列的文章可能跨度比较大,比如按照正常的逻辑,写完怎样搭建开发环境之后,就该接着讲一个helloworld的内核模块,然 后才是这一篇字符驱动的文章,但是我不想重复的去写那么多东西,至于有这方面需求的博友,可以随便google一下就能查到很多类似的文章,因为我是希望 linux的博客和Mac专题的一起同时对比着写,所以理论上的东西不会太多,主要还是讲解每一个能真正运行起来的小实例,用这种方式来阐述内核开发的方 方面面。而且需要重点说明的是,这一个阶段涉及的比较多的内容是关于网络方面的扩展,也就是主要介绍的内容是Netfilter,因为在Mac上我也主要 是介绍Net Kernel Extensions。当然为了阐述NetFilter,也必须介绍一些基本的知识,例如内存管理,同步机制,中断等等。本文主要介绍的是如何实现一个简 单的字符驱动程序,来达到内核和用户空间之间的内存数据交换。 一、设备分类 在Linux系统中设备分为三种类型:字符驱动、块设备驱动和网络接口设备。字符设备是指那些只能一个字符一个字符按照先后顺序进行读写的设备。而块设备是指那些可以从设备的任意位置读取指定长度数据的设备,不必按照先后顺序进行读取。 常见的字符设备有鼠标、键盘、串口等,常见的块设备有硬盘、U盘、SD卡、光盘等。在Linux中用ls

C++基本内置类型

对着背影说爱祢 提交于 2020-01-28 02:58:52
  (博文参考书籍《C++ Primer 中文版》,摘录易忘知识点和容易混淆的内容)   C++定义了一套包括 算术类型 (arithmetic type)和 空类型 (void)在内的基本数据类型。   其中算术类型包含:字符、整数型、布尔值、浮点数。   空类型不对应具体的值,仅用于一些特定场合,常见的如:函数不返回任何值是,使用空类型作为函数的返回类型。 一、算术类型   算术类型分为两类:整形(intergral type,包括字符和布尔类型在内)、浮点型。   算术类型的尺寸(也就是该类型数据所占的比特数)在不同机器上有所差别。下方列出了C++标准规定的尺寸的最小值,同时允许编译器赋予这些类型更大的尺寸。某一类型所占的比特数不同,他所能表示的数据范围也不一样。 类型 含义 最小尺寸 数据范围 bool 布尔类型 未定义 char 字符 8位 带符号:signed char  -128 ~127 无符号:unsiged char  0~255 wchar_t 宽字符 16位 char16_t Unicode字符 16位 char32_t Unicode字符 32位 short 短整型 16位 -2的8次方 ~ 2的8次方-1 int 整型 16位 -2的8次方 ~ 2的8次方-1 long 长整型 32位 -2的16次方 ~ 2的16次方-1 long long 长整型

key 串口

独自空忆成欢 提交于 2020-01-27 20:27:41
/******************************************************************** 函数功能:往串口发送一字节数据(可通过超级终端或者串口调试助手显示出来, 超级终端波特率选为9600)。每按下一次S2键,松开后均会在超级终端 上显示一串字母"abcdefg哈哈"。 入口參数:d: 要发送的字节数据。 ********************************************************************/ #include <reg52.h> #define jingzhen 11059200UL /*使用22.1184M晶体*/ #define botelv 9600UL /*波特率定义为9600*/ unsigned char zifuchuan[]="abcdefg哈哈"; //待显示字符。 volatile unsigned char sending; sbit s2=P3^4; void delay(unsigned char i) { unsigned char j,k; for(j=i;j>0;j--) for(k=90;k>0;k--); } void init(void) //串口初始化 { EA=0; //临时关闭中断 TMOD&=0x0F; //定时器1模式控制在高4位