一个脑瘫的ZYNQ开发板PL调用问题
纯纯在开发ZYNQ(米尔的7007开发板)的时候遇到了这样的问题,当利用PS端调用的emio时出现了一种神奇的现象,PS端的工作正常,PL端直接寄了啥也没有,卡到我怀疑人生,最后以一种奇怪的方法解决了。
首先,验证了所有的代码的正确性,包括Verilog和C,然后验证的板子的硬件可以输出,比如可以用Verilog点灯,所以问题大概率出现在烧录上。
我的启动方式设置成了SD卡启动,当拔出SD卡是提示启动失败,所以大概率是启动选项的问题。
拔出SD卡,ZYNQ的状态指示灯为红灯,说明启动失败,将比特流文件烧进FPGA,可以使SOC从FPGA也就是我们搭建的硬件平台烧录
最后执行一般烧录操作
高云FPGA从入门到如土:(一)IDE安装与verilog小实验
扯皮时间没有便宜只有更便宜
买了900多的zynq板子,亏得月底吃土,其实实验用FPGA有的时候用不到这么多功能。这个时候怎么办?在淘宝和钟sir的蛊惑下选择了高云的片子,一片20,不比自行车香,这个时候正好看到之前我们实验室上古遗老画的小板子,于是拿来把玩一番。
通病
国产片子的通病自然是资料少品控差,网上高云片子的教程基本上是很难找到,还有就是板子的开发环境比较简陋,不过凑合着也够用,而且操作简单报错清晰,勉强算是及格线以上
入门
本人作为一个FPGA萌新,基本上只用过赛灵思的片子,主要还是zynq,高云片子的逻辑单元之类的和那些高性能的FPGA肯定比不起来,但是它的基本操作倒是和赛灵思的片子基本一样,而且麻雀虽小,五脏俱全,算是FPGA入门的不二之选(指不愿意花钱)
第一节:IDE安装与verilog小实验
下载ide首先去到官网下载
云源软件商业版_windows [http://cdn.gowinsemi.com.cn/Gowin_V1.9.8.08_win.zip]
云源软件商业版_linux [http://cdn.gowinsemi.com.c ...
LinuxShell脚本命令以及特殊用法(二)
平台:Centos7
这一期纯粹是命令篇,列一些常用的命令
列出所有版本信息1lsb_release -a
如果没有可以执行
1yum install -y lsb
linux三剑客
linux三剑客指的是
grep:文本过滤工具,( 模式:pattern)工具
sed:stream editor,流编辑器;文本编辑工具
awk: Linux Linux gawk的文本报告生成器(格式化文本),Linux上是gawk
exit
退出当前shell
cat less more
cat命令: 一次性在终端中显示文件的所有内容
cat命令还可以连接多个文本的内容一起输出
1cat -n hello.txt word.txt
less命令: 分页显示文件内容
more命令: more命令和less命令相似,但没有less命令强大,如:more命令不能往后翻页,只能一路往前翻页
ldd
利用ldd查看文件依赖
chroot
查看移植相关环境是否完整
一些兴趣使然的FreeRTOS笔记(一)
导言
本帖记录一些有关freertos内核的一些冷门的知识以及一些代码解读(不间断更新)
大部分文案借鉴《USING THE FREERTOS REAL TIME KERNEL A Practical Guide》由Richard Barry所著
笔记软实时和硬实时
软实时:计算机对每个输入的响应应当限定在一个恰当的时间范围——但是如果响应时间超出了限定范围,并不会让人觉得这台电脑无法使用。
硬实时:硬实时功能必须在给定的时间限制之内完成——如果无法做到即意味着整个系统的绝对失败
线程和任务
在 FreeRTOS 中,每个执行线程都被称为”任务”。
xTaskCreate的一些注意事项
应用程序可以通过定义常量 config_MAX_TASK_NAME_LEN 来定义任务名的最大长度——包括’\0’结束符。如果传入的字符串长度超过了这个最大值,字符串将会自动被截断。
usStackDepth 值用于告诉内核为它分配多大的栈空间。这个值指定的是栈空间可以保存多少个字(word),而不是多少个字节(byte)。
好用但不常用的用法
12345678910111213/* 定 ...
关于串口发送数据头丢失问题以及解决办法
问题原因
纯纯在调试陀螺仪(GY25)的时候出现了发送数据不给响应的问题,连接串口发现出现了首个字符打印不出来的情况,让纯纯特别困惑。
源代码是这样写的(抄了网上先辈的代码)
1234567/**********************printf重定向****************************/int fputc(int ch, FILE *f){ USART_SendData(USART2, ch); //发送数据 while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);//等待发送完成 return ch;}
之前用这段代码的时候没有发现过问题,主要文件中有多处收发的代码,不大关注第一句的完整性,而这一次由于作为协议开头发送,丢掉了一个数据头说明这是一个普适的问题而不是偶尔的发生的错误。
查找办法
没有对策,芯片手册,还是翻看了stm32的芯片手册,看到如下内容
可以看到判断这一个标志位清空了就可以认定为发送完成了
TC 和 TXE 标志位在复位的时候被置1
问题出 ...
开机自启脚本跑飞进不了kernel解决办法
平台:centos7
纯纯一次脑瘫错误的起因
纯纯在编写脚本的时候,写了一个死循环在脚本里,然后放在rc.local里乱跑,结果在实验平台centos7中出现了开机无法进入kernel的问题,卡死在了centos启动的进度条,通过网上大佬的方法解决了,但吓出一身冷汗,所有千万不要在开机自启的脚本里写入一些奇奇怪怪的东西
解决办法
在开机界面(选择启动方式)狂按e或者F5配置grub文件
在UTF8那一句话之后输入
1rw init=/sysroot/bin/bash
这样就可以卡进shell里了
这个时候执行chroot /sysroot 设置为根(和解释器有关,比如用sh就没法用这个命令)
1chroot /sysroot
执行 mount -o remount,rw / 重新挂载
1mount -o remount,rw /
然后就用vim之类的编辑器把脚本给改回来(以后再也不犯这种错误力)
输入exit退出
reboot 问题解决
LinuxShell脚本命令以及特殊用法(一)
导言
编写shell脚本的时候遇到了一些不大明白的命令,同时自己对于非常用命令老是忘掉,干脆直接写一篇文档做一个shell脚本的入门教程
shell脚本对于嵌入式只要做到入门就行了,主要用来自动调用各种程序。
这个系列会分很多篇,基本上收集到相关资料就会出一篇分享一下
语法选择解释器
开头打上如下命令
1#! /bin/sh
选择bin里的sh作为解释器
脚本基础符号解释
注释符 #
变量标识 $(只能在脚本中使用)
1$ x=10 #表明x是一个变量
单双引号
单引号会把引号里的所有元素当成字符串
双引号会把引号之内的变量当成变量,但是其他的元素还是当成普通字符串元素
倒引号(用得比较少)
`` 倒引号:命令替换,在倒引号内部的shell命令首先被执行,其结果输出代替用倒引号括起来的文本。
反斜杠(两种用法)
作为转义符,类似于c作为续行符,如果一条命令太长,可以在行尾加
分号(换行符)
一些细节
shell中的多行注释
12345:<<!(感叹号可替换)注释内容...注释内容...注释内容...!
shell里 ...
stm32+FreeRTOS暴力移植
导言
不用模板,直接将源码移植到我最喜欢的7块钱电子垃圾32c6t6,内核采用freertos10.4.3,采用经典库函数源码ll库(已停更,可以在一些稀奇古怪的地方搞到源码)。
移植
来到freertos官网下载源码[ https://www.freertos.org/zh-cn-cmn-s/ ]这边我已经下载了2020年的版本了,就不重复下载了
找到一个标准库项目创建文件夹
创建目录RTOS
rtos文件下创建两个子目录src和port
将Source/include文件夹拷贝到RTOS下
将Source/portable下的MemMang和RVDS文件夹拷贝到RTOS/port下。
创建工程文件夹
新建FreeRTOS/src和FreeRTOS/port组
FreeRTOS/src组中把RTOS/src文件夹中的源文件全部添加
FreeRTOS/port组添加RTOS\port\MemMang中的heap4.c和FreeRTOS\port\RVDS\ARM_CM3中的port.c ...
一次不怎么走心的vim配置记录
导言
开局照常套盾,我是VSCode党。但是出于种种某些神秘原因,被剥夺了使用图形界面的权利(remote ssh其实可以用,这里仅仅给出另一条基于ssh的编程方案),于是被迫使用了让自己又爱又恨的vim,这次的平台是最新的centos22版本,以下总结一下自己配置vim的经历
设置
首先在用户目录创建vim配置文件
12cd ~touch .vimrc
下载vim plug插件工具(可能有网络问题,我现在使用的是清华源,是可以下载的)
12curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
这个时候查看用户目录,应该会有一个.vim的隐藏文件夹
1ls -al
然后直接在.vimrc里更改配置
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 ...
ros节点通信
利用ros节点将所需要的数据发送出去
先创建publisher和subscriber
在其中一个文件中创建对象为
12ros::Publisher chatter_pub = n.advertise<std_msgs::UInt8MultiArray>("chatter_mpu,1000);ros::Subscriber sub = n.subscribe("chatter_pc", 1000, chatterCallback);
在另一个文件中创建
12ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter_pc", 1000);ros::Subscriber sub = n.subscribe("chatter_mpu", 1000, chatterMPUCallback);
对于以上代码说明
一个publisher对应一个advertiser,其话题的名字应该一样
第二个参数是有 ...