NuttX的应用记录 4 (小记录)

2023-05-16

好久没看过NuttX了,做个移植试一试。
板子是STM32F407ZE,有两块屏幕,蜂鸣器,FLASH,E2PROM,LED。
先找个类似的,复制一个副本。
stm32f4discovery就是407的,复制一下。
include/board.h中修改一下接口,这个很简单。对应的io可以在nuttx/arch/arm/src/stm32/hardware/stm32f40xxx_pinmap.h中查找。将所有的IO都列出来就行了。顺便一提,可以用cubemx来设置外设,然后就会有一个更方便观察的图形界面方便编写这部分。
编写完这些文件后,还需要到nuttx/boards/Kconfig里添加板子。不然板子的相关文件不会被识别。
编写完成后,处理一点BUG,就可以编译出来了,但是跑出去后终端没有相应。下面是DEBUG时间。
Using OpenOCD and gdb to debug my NuttX port to LPC11xx

参考这篇文章,用apt安装openocd

sudo apt install openocd

然后,我的调试器是st-link V2-1,所以就是:

openocd -f interface/stlink-v2-1.cfg -f target/stm32f4x.cfg

现在放着不管这个窗口,新开一个。安装arm的gdb:

sudo apt install arm-none-eabi-gdb

完成后,我调试代码的时候发现不能调试函数内的语句。于是,尝试开启了:

make menuconfig
> Build Setup > Debug Options > [*] Stack coloration
> Build Setup > Debug Options > [*] Heap coloration
> Build Setup > Debug Options > [*] Generate Debug Symbols 

然后就可以愉快的调试了:

$ arm-none-eabi-gdb nuttx
GNU gdb (7.10-1ubuntu3+9) 7.10
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-linux-gnu --target=arm-none-eabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from nuttx...done.
(gdb) load
You can't do that when your target is `exec'
(gdb) target remote localhost:3333
Remote debugging using localhost:3333
__start () at chip/stm32_start.c:271
271	{
(gdb) halt
Undefined command: "halt".  Try "help".
(gdb) monitor halt
(gdb) load
Loading section .text, size 0xfd67 lma 0x8000000
Loading section .ARM.extab, size 0x228 lma 0x800fd68
Loading section .ARM.exidx, size 0x1148 lma 0x800ff90
Loading section .data, size 0x68 lma 0x80110d8
Start address 0x80001ae, load size 69951
Transfer rate: 12 KB/sec, 6995 bytes/write.
(gdb) b stm32_clockconfig
Breakpoint 1 at 0x8000210: file chip/stm32_rcc.c, line 179.
(gdb) c
Continuing.
Note: automatically using hardware breakpoints for read-only addresses.

Breakpoint 1, stm32_clockconfig () at chip/stm32_rcc.c:179
179	{
(gdb) 
Continuing.
^C
Program received signal SIGINT, Interrupt.
0x080043e6 in up_idle () at chip/stm32_idle.c:207
207	  asm("WFI");
(gdb) monitor reset
(gdb) c
Continuing.
WARNING! The target is already running. All changes GDB did to registers will be discarded! Waiting for target to halt.
^C
Program received signal SIGINT, Interrupt.
0x080043e6 in up_idle () at chip/stm32_idle.c:207
207	  asm("WFI");
(gdb) load
Loading section .text, size 0xfd67 lma 0x8000000
Loading section .ARM.extab, size 0x228 lma 0x800fd68
Loading section .ARM.exidx, size 0x1148 lma 0x800ff90
Loading section .data, size 0x68 lma 0x80110d8
Start address 0x80001ae, load size 69951
Transfer rate: 12 KB/sec, 6995 bytes/write.
(gdb) b up_setup
Breakpoint 2 at 0x8000780: file chip/stm32_serial.c, line 1467.
(gdb) c
Continuing.

Breakpoint 1, stm32_clockconfig () at chip/stm32_rcc.c:179
179	{
(gdb) c
Continuing.

Breakpoint 2, up_setup (dev=dev@entry=0x20000000 <g_usart1priv>)
    at chip/stm32_serial.c:1467
1467	{
(gdb) step
1468	  struct up_dev_s *priv = (struct up_dev_s *)dev->priv;
(gdb) 

最后调试出来是LED忘记改IO了。改了后还是不能工作,最后是把st-link重新插了一下串口就正常了。

NuttShell (NSH)
nsh> 

移植还是比较简单的。剩下的就是其余外设的驱动了。


补充一下,使用ui选项可以更好的调试:

$ arm-none-eabi-gdb -tui nuttx

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NuttX的应用记录 4 (小记录) 的相关文章

  • 谈谈Linux内核的实时性优化

    1 实时系统的概念 1 1什么是实时操作系统 什么是实时操作系统 xff1f 接触过嵌入式的小伙伴可能会知道 xff0c 实时操作系统是指在嵌入式领域广泛应用的各类RTOS Real Time Operating System 其中最具代表
  • docker 命令详解(十八):port

    一 命令作用 列出指定的容器的端口映射 xff0c 或者查找将 PRIVATE PORT NAT 到面向公众的端口 二 命令语法 docker port OPTIONS CONTAINER PRIVATE PORT PROTO 三 使用示例
  • 在Ubuntu 20.04上面搭建嵌入式开发环境

    电脑系统盘出故障了 xff0c 重新安装了Ubunt20 04 xff08 之前用的是18 04 日常工作编译基于Rockchip和AM335x系列芯片的内核和U boot比较多 xff0c 所以先搭建它们的开发环境 包括并不限依赖的库和常
  • 自下而上和自上而下的注意力:不同的过程和重叠的神经系统 2014sci

    摘要 大脑在处理物理世界中任何时刻出现的所有感官刺激的能力是有限的 xff0c 相反 xff0c 它依赖于根据瞬间的偶然性集中神经资源的注意力的认知过程 注意可以分为两种不同的功能 自下而上的注意 xff0c 指的是单纯 由外部 驱动因素对
  • Python爬虫抓取基金数据

    Python做网络爬虫需要学习额外基本知识 xff1a 1 HTML 基金所需的数据都通过HTML网页的形式返回 xff0c 数据和HTML tag通过一定的规范组成渲染后的形成网页 了解HTML是为了有效地剥离数据 2 Python的正则
  • ASN1.c v2x开发记录

    一 工具安装及使用 Asn1c编解码器代码git xff1a https github com vlm asn1c 当前主线版本为0 9 29 发布最新版本为0 9 28 将文件解压后 xff0c 依次执行 xff08 1 xff09 te
  • 高德地图api开发记录

    1 高德地图api使用讲解 https blog csdn net Augenstern QXL article details 120488096 具体的使用可以参考高德官方提供的demo和参考手册 2 地图坐标问题 高德地图使用的地图坐
  • vsphere远程访问ESXI端口

    如果要让VM ESXI在外网供用户访问的话 xff0c 要在路由器上面设置两个端口443 902 其中443 端口 主要 负责 别名 讯息 的 传递 xff0c 而 902 端口 主要 负责 远端 控制台 画面 的 传递 vsphere版本
  • CentOS7 下源码安装MPlayer播放器

    最近学习了build源码安装软件 xff0c 老师布置的习题 xff0c 用所学过的知识安装mplayer播放器 通过上网我了解到在linux系统下 xff0c mplayer播放器十分强大好用 但是 xff0c 在安装的过程中遇到了很多问
  • centos7 安装 mariadb 及安装设置

    使用的是linode的centos7系统 xff0c 安装mysql发现已经默认的是mariadb 但是不管是使用linode官网说明还是百度搜索到的的根本安装方法无法安装成功 总是提示这一句 xff1a ERROR 2002 HY000
  • Win8.1和Centos 7双系统, 磁盘挂在问题,Unable to access “ *** Volume”

    在装好Centos7后 xff0c 打开Win8 1系统磁盘时 xff0c 会有如下提示 xff1a Unable to access 70 GB Volume Error mounting dev sda1 at run media yo
  • 编译原理 FIRST集和FOLLOW集的求法

    前几日纠结于编译原理的First 和 Follow集合的求法 xff0c 然后发现了一片不错的博文 xff0c 记于此 原文地址 xff1a http blog sina com cn s blog a1132bf901011ylj htm
  • 今天装gocoed 出现了%path没有设置,不能进行

    今天安装gocode xff0c 虽然设置了Path xff0c 但是还是因为没有设置好 path xff0c 而不能进行 最终我找到了一篇博文 xff0c 结局了这个问题 windows 用户需要 go get u ldflags H 6
  • Broadcom Corporation BCM43227,Linux下安装网卡驱动

    平时喜欢倒腾 xff0c 特别是电脑系统的安装方面 xff0c 我基本上安装过所有系统 xff0c 在我买电脑的2年时间里 但是 xff0c 一直有个问题困扰着我 xff0c 那就是在Ubuntu xff0c Linux Mint等系统下
  • 官网下载Google Chrome离线安装包

    一直在用Google Chrome浏览器 xff0c 不过安装过chrome 的朋友都知道 xff0c 从Google官方下载安装chrome xff0c 会先下载一个小的安装管理程序 xff0c 安装时再从google 下载所需的安装文件
  • VSCode安装go语言开发环境,go插件问题解决

    在安装go插件时 xff0c 会自动更新很多依赖库文件 xff0c 都是从Github更新下来 xff0c 但是因为Github的文件中 xff0c 多有应用go官网中的文件 xff0c 导致 xff0c 因为网络缘故 xff0c 不能直接
  • VNC连接Ubuntu 16.04桌面灰色的问题解决

    1 安装gnome apt get install no install recommends ubuntu desktop gnome panel gnome settings daemon metacity nautilus gnome
  • Linux用diff比较两个文件的差异

    功能 xff1a 比较两个文件的差异 xff0c 并把不同地方的信息显示出来 语法 xff1a diff options FILES FILES的格式 xff1a FILE1 FILE2 xff1a 源是一个文件 xff0c 目标也是文件
  • 基于Qt的GPS导航系统软件源代码

    博主按 xff1a 这是我当初为了学习C 43 43 而给自己定的一个项目 xff0c 基本上实现了 通过这个项目可以说基本上掌握了C 43 43 和Qt的编程 现在将源码贡献出来给初学Qt的同志一些参考 当然其中肯定有不少地方是有问题的
  • (二十)ATP应用测试平台——websocket实现微服务版在线客服聊天室实战案例

    前言 在前面的博客内容中我们介绍了如何使用websocket实现一个网页版的在线客服聊天室 xff0c 众所周知 xff0c 由于websocket是一个长连接 xff0c 要和服务端保持会话连接 xff0c 所以其本身并不适用于微服务环境

随机推荐

  • 启动vncserver服务,并设置开机自启

    systemctl start vncserver 64 1 service amp amp systemctl enable vncserver 64 1 service 无论你是做网站工作 xff0c 还是运行一个家庭远程服务器 xff
  • "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"?

    参考资料 xff1a https blog lmlphp com archives 437 PHP 7 3 classic error continue targeting switch 找到代码那一行 xff0c 修改 xff0c 保存即
  • SLAM学习笔记2:Kalman Filter(卡尔曼滤波) 与Least Square(最小二乘法) 的比较

    对于一个问题的解决 xff0c 最根本在于怎样对它进行数学建模 对SLAM问题的建模 xff0c 基本上是基于filter和graph两大类 xff0c 今天整理了一下 xff0c 对比两种模型的区别及共性 主要参考这篇讲解 xff1a h
  • RTC实时时钟特征与原理

    RTC定义 RTC是个独立的定时器 RTC模块拥有一个连续计数的计数器 xff0c 在相应的软件配置下 xff0c 可以提供时钟日历的功能 修改计数器的值可以重新设置当前时间和日期 RTC模块和时钟配置系统 RCC BDCR寄存器 是在后备
  • 树莓派配置,小白教程,无键盘显示屏鼠标

    树莓派配置 xff0c 小白教程 xff0c 无键盘显示屏鼠标 实验步骤 xff1a xff08 1 xff09 在树莓派官网下载树莓派的系统 树莓派官网下载地址 xff1a http www raspberrypi org downloa
  • CAN总线综述-转发一篇关于CAN总线的详细介绍文章

    CAN总线 一 原文出处 xff1a http www cnblogs com jacklu p 4729638 html 嵌入式的工程师一般都知道CAN总线广泛应用到汽车中 xff0c 其实船舰电子设备通信也广泛使用CAN xff0c 随
  • Python 安装 MaxMind GeoLite City

    1 先安装 geoip c library geoip c library gt 61 1 4 6 installed on your machine gt 61 1 4 6 installed on your machine wget h
  • 华为MA5626-8密码恢复

    设备型号 xff1a 华为MA5626 8 display version VERSION MA5626V800R308C00 PATCH SPC500 SPH505 HP5105 PRODUCT MA5626 准备工作 xff1a 超级终
  • SNMP 获取交换机端口相关信息

    我们想用snmpwalk查看网络设备的端口 xff0c MIB库中相关定义的信息如下 xff1a root 64 redcock lifeng snmpwalk v 2c c lifeng 192 168 100 100 注意后面的点 xf
  • phpMyAdmim和Yii 连接Mysql报错。

    故障 xff1a 之前phpMyAdmim和Yii连接Mysql都好着的 xff0c 某天 xff0c 同时出现如下报错 xff1a 1 linux下phpMyAdmin 出现 缺少 mysqli 扩展 xff0c 请检查 PHP 配置 2
  • linux shell 执行多个命令的方法

    xff08 1 xff09 在每个命令之间用 xff1b xff08 分号 xff09 隔开 xff08 2 xff09 在每个命令之间用 amp amp 隔开 amp amp 表示 xff1a 若前一个命令执行成功 xff0c 才会执行下
  • ARP 属于哪层协议

    教材上把ARP 协议划到网络层 xff0c 是因为 ARP 协议属于 TCP IP 协议簇 在TCP IP 模型中 xff0c 它所有定义的协议是在网际层上的 再看按照OSI 的标准 xff0c 数据在传递时每层会加上自己的信息 当网络层的
  • 什么叫一层交换机,二层交换机,三层交换机?

    转自 xff1a http blog csdn net happypolo article details 5934429 简单地说 xff1a 一层交换机 只支持物理层协议 电话程控交换机可以算一个 二层交换机 支持物理层和数据链路层协议
  • Linux Shell 脚本中字符串的连接方法

    Linux Shell 脚本中字符串的连接方法 如果想要在变量后面添加一个字符 xff0c 可以用一下方法 xff1a value1 61 home value2 61 value1 34 61 34 echo value2 把要添加的字符
  • linux 如何将路径加入环境变量

    PATH 61 PATH 后面加路径 PATH是环境变量 要大写那几个目录是你放置linux命令的目录 输入命令后系统会去PATH中寻找是否存在该命令 查看当前环境变量 echo PATH也可以用set命令看一下设置 export PATH
  • expect spawn、linux expect 用法

    使用expect实现自动登录的脚本 xff0c 网上有很多 xff0c 可是都没有一个明白的说明 xff0c 初学者一般都是照抄 收藏 可是为什么要这么写却不知其然 本文用一个最短的例子说明脚本的原理 脚本代码如下 xff1a usr bi
  • python 调用 shell python shell 间变量传递

    python gt shell xff1a 1 环境变量 python view plain copy print import os var 61 123 或var 61 123 os environ var 61 str var env
  • vSphere,ESXi和vCenter 的区别

    最近在看 VMware 一直没有搞清楚这几个产品之间的区别和联系 正好在网上搜索到一个好文 xff0c 翻译下来 本文翻译自 xff1a http www mustbegeek com difference between vsphere
  • equals和hashCode详解

    在学习的过程中 xff0c 特别是学习集合的时候 xff0c equals和hashCode一直是经常出现的方法 xff0c 而且在面试题中 xff0c 也经常出现equals和 61 61 的区别等问题 xff0c 现在我们就从底层详细的
  • NuttX的应用记录 4 (小记录)

    好久没看过NuttX了 xff0c 做个移植试一试 板子是STM32F407ZE xff0c 有两块屏幕 xff0c 蜂鸣器 xff0c FLASH xff0c E2PROM xff0c LED 先找个类似的 xff0c 复制一个副本 st