关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构4 u  H& \1 Y6 y3 T6 `; t: |" \$ C$ o

: h; |7 G0 k0 w! J  k0 d" h3 w    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
, Y! L: M  F* N7 v9 P9 x8 K  M: r& D9 b2 P! ?1 a- a  V: V5 Y
其他程序段。。。。。4 e" ^0 ?+ Y4 |+ Z- b; \9 h* I$ H

7 T9 f! v4 ~8 w: }& k   free(x_d);- n/ t3 E1 ?% s$ ]. N! l; i9 V
) H% Y- B3 W6 ^5 N
使用DSP侧单独调试功能,验证动态申请没有问题,- j+ F8 P1 u8 Y  `0 B7 |9 ^, l$ J" K

" Z9 A9 r* {8 o! C但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。0 m+ L, A3 ^9 I; e

% h7 ]1 F3 T- w2 e5 t3 S& w: _; J+ C- U5 b' ]2 {! c# C$ H" c! |
9 P; E9 x$ `0 h* P7 [& @& K7 D+ n( O
. B- f. h) u9 n5 _5 H4 n

# B! t9 @3 J; P. G5 D' L# K5 m: R) n) [% C  C
) a5 u, |4 _% S7 c
* B8 I' {; o  f% b7 r7 s$ e1 V, @
& U6 L! U! g9 `( d6 H
0 I% u. [4 T$ H, E& }2 \2 N$ y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明# i+ x* ~6 |% t* ?% N/ n7 {
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. o$ P% t) F9 @, ?(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, O. a: P/ O: J' [% R: q3 l
. Q! Y. t. p* A6 U' M: u- o
是不是需要在DSP.CFG中进行配置
0 g) F/ e, a9 B& c我现在的配置为
5 \/ o+ f, _) x4 H- q
- s2 k  l+ ^# N! W* E! w/*
7 g& X0 _! ^* A: e5 [. l *  ======== Operating System Configuration ========
; S" z3 H5 A& p' E/ j' Y* \ */) N4 n  L& Q; I) @) p

4 k: B. m) l5 o% }/* no rts heap */( }3 `* l3 Y4 X) W( ?+ a1 k0 v3 `( Z3 z
Program.heap = 0;! H6 k3 M8 D: @% A1 O1 M+ b
Program.argSize = 100;  /* minimum size */) V1 G" x% R0 a+ V& u* w
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大2 g( y4 C8 V/ Z: |) U
( e5 C1 L- w' y( o
/* create a default heap */
* A% j: @" I1 `* U2 A$ B1 J1 Hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 k1 i2 f; k% c9 z( y5 x
var heapMemParams = new HeapMem.Params();. E  Y! {# }9 e* d- s. V
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; G* _3 G, A& q
3 [0 ~- Q$ d1 K1 T# S  D
var Memory = xdc.useModule('xdc.runtime.Memory');/ N0 `. c" ~9 _& w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! x/ n% o) O- E, X  N, F4 y
0 z- f' `8 U2 z" {! J# _1 \6 H
/* configure System module */
! D7 @$ L' V) ?var SysMin = xdc.useModule('xdc.runtime.SysMin');
2 Q7 l) n7 E: d& G% PSysMin.bufSize = 0x1000;
3 L4 D9 \+ ~4 C7 JSysMin.flushAtExit = false;* O* k4 n8 s% ~" k7 }9 b, [3 X

2 {$ d; |7 y/ f1 e( yvar System = xdc.useModule('xdc.runtime.System');
$ E5 D* A+ v  D4 Z3 Y0 MSystem.SupportProxy = SysMin;
& x  ~$ z) h3 l! f$ C/ O" ?9 u# D4 K$ U
/* configure SysBios to use the lower half of Timer 1 */+ I4 {5 q: a' L1 w( l8 q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
: O7 {) K) m; {# e! ]var Clock = xdc.useModule('ti.sysbios.knl.Clock');+ F& Q! t9 e, }5 Q* o, {
Timer.timerSettings[1].master = true;& {: U. P$ K8 S5 S7 \: V* g
Timer.defaultHalf = Timer.Half_LOWER;
: j, E8 V" L! F6 bClock.timerId = 1;8 q! U8 @! Q$ c6 A8 k2 F
& B: V( ^( C# L: }( T; r9 k0 O% C, d! Y

# Z9 U# v2 y. C- o/ W' @. W/*
8 i4 X7 u( i% D1 \) b  v% N *  ======== Miscellaneous Configuration ========
) ?! b) }: L" U */3 t+ D4 x( x& ?7 P+ Q1 t

$ p- D6 n, o* f0 \5 Q/* set default diags mask *// l3 J: \% L1 _$ |
var Diags = xdc.useModule('xdc.runtime.Diags');) {8 E1 j/ {8 _5 S
var Defaults = xdc.useModule('xdc.runtime.Defaults');8 j. O( h# w- p' I. i/ B7 G

$ q  o; |! k; |8 \5 j& l' UDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ H3 x( U; j! R: ?Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& m, ~; B* Z7 c6 Z2 \) rDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  w, z6 X  p. X3 ]' n1 }. ADefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 N2 \) K, S  I; L% z
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 s% ?/ _& h" z# i1 q$ o7 zDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 |0 w% b- r1 l. c5 W
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 M/ A! D8 N0 l( C5 k' {3 I2 G0 R/ s; X3 \
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; y1 s1 a% I; nDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- R/ x4 }& f6 }8 n  z/ U, C+ k
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
3 z1 j0 s* ~, |' D9 B$ A- V2 TDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
3 ~$ q0 j0 `! q: x, F2 ]9 aDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 a$ g) t1 Z; z7 ]
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 f4 m# Y5 Q+ K" f" \. P
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 k1 q; ]) }' Q( A2 d8 O' T* O. U, v: n
/* override diags mask for selected modules */
; e9 e6 ~2 K3 k' _xdc.useModule('xdc.runtime.Main');3 ?, [  W' L3 |( e* F& A
Diags.setMaskMeta(1 R6 Y4 J% z# H% s# e
    "xdc.runtime.Main"," |1 D; B4 q  z
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% H7 s, z8 z2 [. b, ~    Diags.RUNTIME_ON- _5 H) H3 p3 ?+ O& x( ^4 q
);) R) R& ]9 c) B* b- K! j$ [
9 L9 z* n! s+ \% G9 v
var Registry = xdc.useModule('xdc.runtime.Registry');) `/ k7 m2 E) N* M& q: @1 ]1 ^
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
7 }. G" @' y$ X# x, p- A# ]Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 t2 W7 x! b/ L8 _7 X
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: O- V% P" [$ s" u0 RRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- u. G7 A1 j$ i! v( n7 f4 w
! Q3 F, W  h, c, p+ b" a, z' q/* create a logger instance */
; d- @5 w  J+ i( f  Cvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');/ K% U; _4 ~8 [
var loggerBufP = new LoggerBuf.Params();
; C# |' ^( H# G3 H7 X# iloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  `; ~3 Q* `  U1 H  j2 x* hloggerBufP.bufType = LoggerBuf.BufType_FIXED;7 ?5 N3 ?! A9 ?$ B2 j

/ L# B& E5 |" |3 }% U2 Jvar appLogger = LoggerBuf.create(loggerBufP);) m2 e+ w, [0 E7 Z0 n% L: }  x
appLogger.instance.name = "AppLog_Core1";
  P) T* }. Y* c& [+ i" N; uDefaults.common$.logger = appLogger;
* ]- V. X0 {' x2 bMemory.defaultHeapSize = 0x8192;   
; y0 K6 J4 @. Q# d5 K- v$ F* lIdle.idleFxns[0] = "&LEDStatus";
& i! U. i0 _, r& `Cache.initSize.l2Size = Cache.L2Size_32K;
. W6 I  P, _$ ]& L
. v/ y5 B: ^$ r, ^: c$ r
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
0 r1 v, H; ~* j9 ^6 @var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) j9 @' n! Z3 ]& j/ l; T' Y, tvar heapMemParams = new HeapMem.Params();
$ y# v  m/ J4 g( z/ @heapMemParams.size = 0x4000;3 A# K6 D# @$ X5 R
& b: P1 Z/ J  \" Y: S
var Memory = xdc.useModule('xdc.runtime.Memory');
7 E8 i3 M7 T/ n3 m4 L5 k6 |/ BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);$ T: G2 N' c. ]8 Z! }5 P
5 L8 d4 m# i( H- ?
我大约calloc  每次共计大小为5K*16bits,% g( ^' l' [6 [+ d( o% Q
而默认配置才0x4000、需要改大。( K9 a! D; U6 V' z% [
8 y* C+ M2 Y" K0 T5 H
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */- M- F4 k$ y& `; g  X
Program.heap = 0;
4 }  u2 L6 M5 |4 @8 k, E& CProgram.argSize = 100;  /* minimum size */: e8 k( \9 V- K9 e/ X- b
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-18 23:47 , Processed in 0.042111 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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