IMX6ULL学习笔记_Boot和裸机篇(6)--- IMX6ULL简单SHELL以及SEGGER ES的Printf和字节对齐问题

项目开源链接以及作者信息

项 参数
github主页 https://github.com/snqx-lqh
github项目地址 https://github.com/snqx-lqh/IMX6ULL_LearningRecord
gitee项目地址 https://gitee.com/snqx-lqh/IMX6ULL_LearningRecord
作者 VX Qinghua_Li7

📖 欢迎交流 如果对你有帮助,希望可以帮我点个赞👍和收藏,谢谢

基础环境

硬件环境:正点原子IMX6ULL MINI板 V1.7 EMMC板

程序说明:为方便开发,程序使用 BootLoader + APP 的方式开发。使用BootLoader来进行升级,前期不将 BootLoader 作为开发重点,所以先使用 UBoot 作为我们的 BootLoader 后续可能会使用自写的 BootLoader 。所以先使用正点原子的教程给板子的 EMMC或者SD卡 下载一个 Uboot。方便实现在线程序升级和运行。随便烧一个就行,不用自己去编译,下载它自带的就可以了。等下做说明。

裸机程序编写软件:SEGGER Embedded Studio V8.24 。 为了在Windows环境下编译裸机开发,所以使用 SES 的软件编写。

本文代码路径

本文的代码将存放在开源项目的:02_Firmware\01_CodeWithoutOS\05_Shell中。这节的代码,主要是实现简单的shell,并且找到了一些BUG解决方案

Shell

关于Shell的实现,比较简单,我是用AI简单写的然后自己调整了一下。可以直接看我的开源代码。

Printf问题

我自己写的,包括前几节都有遇到这个问题,就是重定义的uart_printf不能打印小数和位控制。如果打印了%2d,就会打印个d。后面发现,需要在工程中打开相关编译选项。打开后,自己的Printf就可以打印小数一类了。

strcmp的字节对齐问题

这个问题其实我暂时不是很清楚,但是就是定义的字符串,存储的地址不是4字节对齐的,结果导致试用strcmp的时候会卡死,解决办法就是定义的时候使用__attribute__((aligned(4)))做一个对齐。

c 复制代码
typedef struct
{
    const char *name;
    void (*func)(int argc, char **argv);
    const char *help;
} shell_cmd_t;
 
const char help_str[] __attribute__((aligned(4))) = "help";
const char help_str_help[] __attribute__((aligned(4))) = "show all cmd";

const char led_str[]  __attribute__((aligned(4))) = "led";
const char led_str_help[]  __attribute__((aligned(4))) = "control LED: led on/off";

const shell_cmd_t cmd_table[] = {
    {help_str, cmd_help, help_str_help},
    {led_str,  cmd_led,  led_str_help},
};
相关推荐
syagain_zsx4 分钟前
BRpc 二次封装:Channel 管理、服务管理与回调工厂
c++·学习·程序人生·rpc·谷歌
其实防守也摸鱼7 分钟前
Cylab在线靶场——CTF中的通用技能
linux·数据库·学习·算法·靶场·ctf·学习网络安全
我命由我1234520 分钟前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
摇滚侠1 小时前
《Java并发编程之美》第 4 章 Java 并发包中原子操作类原理剖析 阅读笔记 7
java·笔记·python
kkkkkkkkkk_Z1 小时前
新手自学嵌入式 | 学习日记:Linux驱动复习之系统移植(U-Boot篇)
linux·运维·学习
Rabitebla1 小时前
【系统性学习笔记】Linux 权限篇(二):文件属性、权限修改与目录权限的底层逻辑
linux·c++·笔记·学习·算法
深圳老胡2 小时前
STM32CubeMX 2 与 STM32CubeMX 的主要区别
笔记·stm32·单片机·代码规范
fanged3 小时前
嵌入式架构学习6--ZSWatch(TODO)
学习
叼烟扛炮3 小时前
Linux 学习笔记(十三):高效排错利器——GDB 调试器入门
linux·笔记·学习
Source.Liu4 小时前
【A11】服务器数据库结构笔记
服务器·数据库·笔记