页次: 1
Nano是armel架构, Zero一般为armhf架构, 也可以运行armel架构.
一般来讲Nano编译的程序也可以在运行armel架构Linux的Zero下面运行. 当然Bootloader和Linux Kernel这种跟寄存器操作有关的程序还是要重新配置编译的.
armhf运行armel可能会出现动态链接库不匹配的情况(
armhf的工具链前缀是arm-linux-gnueabihf- , arm的工具链前缀是arm-linux-gnueabi-
Running armel binary on an armhf system is highly NOT recommended. I could say, you must not do that.
两个交叉编译器分别适用于 armel 和 armhf 两个不同的架构,armel 和 armhf 这两种架构在对待浮点运算采取了不同的策略(有 fpu 的 arm 才能支持这两种浮点运算策略)。
我这边源代码后缀是cpp但是不用cpp的特征, 仅仅是为了vscode不会报错, 编译的时候是写脚本把文件后缀从cpp改成c, 最后通过脚本调用Keil提供的C51工具链在命令行进行编译, vscode默认下面有终端所以基本编译都是上箭头+回车就可以解决.
通过脚本调用C51工具链, 顺序是C51编译器, A51汇编器, lx51链接器, OHx51文件转换器, 这四个程序的命令行使用方法可以在http://www.keil.com/c51里面查到.
附件是我自己用的脚本, 程序用python 3.6.3验证过了, 有一个KEILPATH变量需要自行修改, 可能要使用pip install click, 用于解析命令行参数.
附件: buildC51_py.zip
#ifndef __VS_CODE_H__
#define __VS_CODE_H__
#ifdef VSCODE
#define _nop_() (void*)0;
#define interrupt(x)
#define using(x)
#include <stdbool.h>
#include <stdint.h>
typedef bool bit;
class sfr{
public:
sfr(int){};
sfr(){};
~sfr(){};
bool operator ^ (uint16_t data);
bool operator ^ (int data);
sfr& operator=(const sfr& other);
sfr& operator=(const int other);
int operator ^= (int data);
int operator &= (int data);
int operator |= (int data);
int operator | (int data);
int operator & (int data);
operator int(){};
};
#define sbit bool
#else
#define interrupt(x) interrupt x
#define using(x) using x
#endif
#endif
页次: 1