=嵌入式开发中的一句话备忘 - 单片机&RTOS系统
目录
51单片机备忘
Cortex-M核 +RTOS开发
//野火F407开发板的DAP仿真器配置:
//Keil 中1个汉字是双字节,删除需要按2次,如下操作可以解决:
C语言
// objdump -t obj:输出目标文件的符号表
//DEV-CPP中如何看内存,如下:
print /x &name[0]
获得内存地址:
执行:
x /32bc 0x62fe10
查询地址的内容
//Q:Dev-CPP中如何在debug时带入入参?
A:如下如果入参需要加一个 -help,则类似如下步骤操作,就进入 -help 分支了(使用的gdb的 "run 参数列表" 命令):
//嵌入式系统中gpio如果是输出pin,则先高/低电平,再配置方向,因为如果先配置方向,则有可能出现电平掉低又拉高,导致触发外围器件,比如CPLD芯片进入PROGRAM状态。
//有时为了查一个宏是否开启了,在代码中插入AAA或者BBB,但是如果是头文件查宏开关用AAA,BBB,编译报错的是某某C语言报错,比较难查,所以在头文件中推荐还是#error "AAA" 这种方式最佳。
// 数组赋值,采用如下的方式比较简洁:
#include <stdio.h>
#include <stdlib.h>
struct PPP
{
char a;
char b;
char c;
};
int main(int argc, char *argv[]) {
int i ;
struct PPP kk[10] = {
[0] = {0,0,0},
[1] = {1,1,1},
[3] = {3,3,3},
[4] = {4,4,4},
[9] = {20,20,20}
};
for(i =0;i<10;i++)
{
printf("[%d]-> %d \n",i, kk[i].a);
}
return 0;
}
显示结果:
//看log时,经常需要分析一个函数(比如下面的at45dbx_chipselect_df())是具体被哪个函数调用的,如果每个地方都添加打印,就要修改n个地方,非常麻烦,其实可以通过修改这个函数,把调用者的行号打印出来,这样log中打印出来的行号(比如 “-->at45dbx_chipselect_df_2nd:line= 234”),快速甄别出是被哪个函数调用的。
修改前:
static void at45dbx_chipselect_df(U8 memidx, Bool bSelect)
{
xxxxx
}
修改后:
#define at45dbx_chipselect_df(a,b) at45dbx_chipselect_df_2nd(a,b, __LINE__)
static void at45dbx_chipselect_df_2nd(U8 memidx, Bool bSelect , int line)
{
printf(“-->at45dbx_chipselect_df_2nd:line=%d” , line);
xxxxx
}
Linux软件开发
//看一个软件底层使用的哪些库的方法
其他
本来想更新到维基百科,但是维基百科被封了,百度百科又不让更新词条,只能在自己的一亩地随便写写,列为看官欢迎指正:
----
CPU | RTOS | GUI | 典型应用 | 小系统成本 |
8bit | N | N | arduino等各种单片机开源/闭源项目 | 十元左右 |
8bit | Y (比如keil C51的RTX51等) | N | 十元左右 | |
8bit | Y | Y | 按键输入,简单的LCD字符显示输出 | 几十元 |
32bit 不带显示驱动 | Y(FreeRTOS,RT-Thread等非linux系统) | N | 如ESP8266(32-bit RISC microprocessor core based on the Tensilica Xtensa Diamond Standard 106Micro running at 80 MHz)使用的FreeRTOS | 几十元 |
32bit 不带显示驱动 | Y(嵌入式linux) | N | 如openWRT支持的诸多品牌路由器,如TP-LINK WR703N,Atheros的AR9331-AL1A处理器主频400MHz,使用busybox裁剪的shell。 如ArduinoYún使用Atmel ATmega32U4和附加的处理器Atheros AR9331 (CPU: MIPS 24Kc @400 MHz),该处理器运行Linux和OpenWrt无线堆栈 |
一百多元 |
32bit 带显示驱动 | Y (android如各种手机或轻量级linux) | Y | 如Raspberry Pi4(博通 BCM2711 SoC,包含四个 1.5GHz Cortex A72 CPU 核心),BeagleBone(TI AM335x Arm Cortex-A8 1 GHz),有的是多核芯片 |
几百元
|
RT-Thread
//Q: pkgs--update 和pkgs--upgrade 有什么区别呢?
A:
一个更新目录,一个更新具体package内容
前者更新当前项目引用的包到项目下的packages文件夹,后者更新本机的env文件夹下的软件包列表,它决定你的env菜单会出现哪些菜单项
update会下载包的源码,upgrade会下载包含包下载地址的json文件到env目录下的packages文件夹里,不会下载源码文件