关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6937|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构3 ?( X' o" O" Q5 M# T" u( q0 c9 V

" h* K! c! r2 a, v2 z5 I    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ O6 U! s; e9 s: x( K# b, S1 t6 w$ t7 y% M2 s( P7 ^
其他程序段。。。。。2 U6 A# B. y4 K8 A5 t1 G

( r7 f+ t0 \; ]" C! {   free(x_d);
: K& I2 K0 k; \. E% a' x2 A4 }1 I
# o. E. B# G& A  V; R9 P7 ?使用DSP侧单独调试功能,验证动态申请没有问题,
7 U4 k7 t4 @) I9 O4 ~% I/ t4 ^1 @/ K. B- w8 C3 O
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 L  ^# v- A1 d2 M

; s& P# G- q3 d& K" h! S* d% N2 F9 a0 U0 z* |" M5 `: _
4 D" _4 w# N4 c$ w+ d; R
; f" K3 Q, {# n- [* F

* O' h- j5 W% r
2 i0 c9 Q; @# q$ p5 I3 U* N/ |5 d) C% I
. J1 u$ T6 n' L. N5 C2 {

( S: ^/ E) c* o0 f  w: s
- E. ]. W, T0 K% |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */- P8 [" Q1 s; A
Program.heap = 0;
: s& p. ^6 v# b! f7 |Program.argSize = 100;  /* minimum size */
* ~8 k4 w" X1 O! C. w3 @! BProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */+ _- U( O6 _# s: k" y7 M
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% D  H( n8 j7 b. evar heapMemParams = new HeapMem.Params();' Q; C% h: c( t9 ~! ?9 x, l
heapMemParams.size = 0x4000;# x# m- K1 ~) Q  Y, p

! o5 M; w/ f. Uvar Memory = xdc.useModule('xdc.runtime.Memory');) F5 O5 k/ t# B: R/ r0 @* g( l
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 p4 N  y6 `9 d( d) W% _9 D
0 B( X) h, m1 g( W. t* q我大约calloc  每次共计大小为5K*16bits,
: z$ {; T% ~4 r: v( z8 E+ C% I而默认配置才0x4000、需要改大。0 `/ T/ V7 Y& ~0 l- C) P( W
* r1 x5 \$ h7 B: b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明) Y/ C& B" F& n) }
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 W$ s! G& x: O0 T2 d! w; S
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)- e0 ^5 B4 Y; Z3 D

9 f# k: H- i  i" f9 }是不是需要在DSP.CFG中进行配置' q! b1 r8 n; S" A2 `8 j; p/ B( f9 x
我现在的配置为4 w4 X6 @% X' f) a5 ?% K

2 A# i7 m7 f! V& \' d  b  W/*
$ X, r1 Q, E8 L1 z$ V+ ~ *  ======== Operating System Configuration ========$ G8 }6 O! \, F
*/  `: l  }+ Q' P' i7 `0 L
7 m  v4 @( W* n; m+ c* A. }
/* no rts heap */
& A, p) g0 J) \2 cProgram.heap = 0;
* O# \, l6 A0 d' P6 f$ GProgram.argSize = 100;  /* minimum size */
) A9 W" q+ G0 m8 }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 O; \0 S) z) A) t5 u- L$ F
2 @: R! ?/ O! a  ~6 |# j/* create a default heap */
; f8 M9 C3 p( M: C8 A% Rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 Y& y! A8 c4 R( ivar heapMemParams = new HeapMem.Params();! ]: ?/ s# h7 O8 D3 |* \$ y3 a/ @
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
* `- Y/ ]) u0 r; R/ t
9 w5 {( P! d! f- \
var Memory = xdc.useModule('xdc.runtime.Memory');
; h. x1 K- U/ O' e% b8 [0 eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);- A- g- @* \. P4 U* g! i, M1 J' e
, ~# |9 S$ E# w- y% a
/* configure System module */
) [: \0 {, g. ~% n9 p# pvar SysMin = xdc.useModule('xdc.runtime.SysMin');+ s3 n5 ]/ p% y5 G+ B; d5 m
SysMin.bufSize = 0x1000;
" Z8 W' W* m( i1 t, `( M) F% }SysMin.flushAtExit = false;
& I" V! x+ h7 W, \) ~! O5 `
1 j# D, d) @- B/ U# Svar System = xdc.useModule('xdc.runtime.System');$ n' _( \) v) n% b7 i& L7 m: P
System.SupportProxy = SysMin;! x; t" ~+ [6 O1 z/ {; }) b% [% |7 L
2 P) m0 A4 a+ y8 L/ k! e8 x
/* configure SysBios to use the lower half of Timer 1 */
+ u# z& I- k- K+ @" Yvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( S' D  z6 {" n" F0 P2 @var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ ^- w# R  c& l! \4 wTimer.timerSettings[1].master = true;  y, v9 N. B$ I' X6 ~
Timer.defaultHalf = Timer.Half_LOWER;: o, k3 w* e( }* J0 ^! `/ P4 Q. }+ y
Clock.timerId = 1;8 f5 X( r: y- G# _
0 m: T$ B5 G/ I- B, p$ @) }
5 v. P0 [# R3 R
/*$ e) r1 t* i3 r5 `' K; M( G/ H
*  ======== Miscellaneous Configuration ========
7 R- x4 L2 K1 b' ~8 T */* ^. S) @5 T& a' z  W9 Z, t
$ ]' c( l, M: v1 u" y. `% A. w
/* set default diags mask */4 u, m4 k7 \% v: W# k) @
var Diags = xdc.useModule('xdc.runtime.Diags');$ s. o- R; C9 g6 L* s1 r* w2 K
var Defaults = xdc.useModule('xdc.runtime.Defaults');, J$ ]! @) v1 t* S$ B) _
7 `$ u  s' ]" f2 s" B7 V
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
5 T2 E- I8 K& w4 q  S3 ?8 gDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;5 g3 T2 D- c1 {0 j" T
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
, G6 U2 l6 J' n7 G0 G2 g3 v" uDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  y0 f9 B- _! y4 w) a6 Y
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */. h' g6 o) V0 R# e) B, w
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 U& M- d% U% O9 HDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# U8 A3 Y; D! L7 ]1 Y6 x- t
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
/ Y" h* I& I8 N+ {3 bDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! d2 F+ b  K; w1 |Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) F9 Z+ Q9 l& c% u' a+ g
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 B! u: G6 T; |9 r$ v% ?2 \0 zDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) N- X; b+ Q$ W0 u- N1 b! k
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# o* P$ A8 k# h1 @0 p/ W. z) v7 r
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
& m$ Q: c0 S! F: m# A
8 n9 D$ \& D8 r1 e  P( W/* override diags mask for selected modules */
6 i# ~4 c8 R7 G) \( O. R; Sxdc.useModule('xdc.runtime.Main');
; }0 t) o7 e' h: y# J% D2 x8 GDiags.setMaskMeta(
9 [% F+ p" Q2 F( H* z; r- l! _    "xdc.runtime.Main",% }( O! L# y0 y3 k3 r! a
    Diags.ENTRY | Diags.EXIT | Diags.INFO,' v( t. V3 y2 t* f$ G
    Diags.RUNTIME_ON$ \: B/ ?2 F& a+ Z
);! l9 x9 _8 _0 _: e$ r
% j2 \6 ^* }6 l, l3 g( B& a; Y
var Registry = xdc.useModule('xdc.runtime.Registry');" D7 K. C* `5 u8 L
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 i* B3 q5 m0 P% t( o: K3 }Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
$ Q8 D$ l) Y+ _! }+ ]! U( N  E8 Q+ vRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ J; q# V# d$ D2 W8 ?
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
9 L! |* R$ {, |
% C+ q  G2 {6 m5 _5 k0 Y/* create a logger instance *// W0 Q+ O$ M+ k3 u% ~4 L
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. }) C0 L  V! m% {: o& n0 f! {var loggerBufP = new LoggerBuf.Params();
2 E: U5 v! A+ u  w3 mloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* `. E! Y. Z  o$ B/ `* zloggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 @2 t. d+ Y2 g2 I9 Y& u: ~) X5 M( M. Z
var appLogger = LoggerBuf.create(loggerBufP);
6 z: Q* A) M9 _& `/ XappLogger.instance.name = "AppLog_Core1";: u" c8 {$ q! y
Defaults.common$.logger = appLogger;
+ T9 d8 A6 F1 z' ]Memory.defaultHeapSize = 0x8192;    : w) Y; P" A9 s. n2 _# L
Idle.idleFxns[0] = "&LEDStatus";
6 ^0 t! @6 \4 @4 A4 V1 U6 jCache.initSize.l2Size = Cache.L2Size_32K;$ W- U0 C- d) Q6 {! O# `2 W9 `* \
+ e3 C3 F4 s! c
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-1 19:51 , Processed in 0.040751 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表