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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 _% ?" E- z9 h3 ?, b8 f1 b1 }' v4 ^  H9 }8 p  @3 Y  d
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 R4 E: [7 T/ Z. c' t

% j& i" e+ }6 Q其他程序段。。。。。, r  [8 N( N1 G6 `  Y* [1 t

/ ^0 X" e% y# ^% i& l   free(x_d);$ X: X. v4 z- w4 E: B, Q

% [! ?: ~3 g) P: j使用DSP侧单独调试功能,验证动态申请没有问题,7 ~0 p7 M' ~0 W
0 W2 |' c7 |+ e( l$ w
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 `# J( z* O; s1 E

2 [$ b2 z/ U% ~2 W% Q+ {# I& @7 M% i# M/ f: z* g4 \
0 N, C& [+ G+ W& Z% S  Y
* e) g7 k0 ~, O, o9 y6 I  r( R
8 t" L+ M* [8 u

) L. i% @( c' Q3 z+ S- c" a, L7 \, z
8 N8 u+ r- |, G0 h0 w, n3 ^* t; o
1 n7 t3 _) e! g$ u/ [& F) U7 h  m6 b% N

5 U* W! l( m3 V# ?
分享到:  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 */
0 c5 [& t, K2 IProgram.heap = 0;) I7 b. D5 @' x( w) {. i$ H2 v* w
Program.argSize = 100;  /* minimum size */( l- W. |( o2 c  _3 `
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
- H7 @8 g+ e. M  x* cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ A) M' H4 x1 j8 y- f
var heapMemParams = new HeapMem.Params();
: W6 {. ^" w, Y( |heapMemParams.size = 0x4000;3 s  |( @# U9 h! n( E; E+ _. ~
& |1 m# u" V$ F) Z% l& |+ w
var Memory = xdc.useModule('xdc.runtime.Memory');: R7 e( x- u- s5 v5 ]$ R
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ D$ _/ E- |/ ]; L" s
1 N; [* {) S+ }' Q7 M' z我大约calloc  每次共计大小为5K*16bits,
1 j% N9 V0 B, P5 z4 h' O而默认配置才0x4000、需要改大。
6 k& K1 o& [5 `5 `" v5 G+ C5 M
7 F4 E2 q' q* H6 p; R
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明1 M! j+ ?; `5 Y( E' c
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
2 L0 U* a8 N4 }& {" C4 ~  K(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 T. V& I- ?% r3 [1 _  h; C
$ M) C5 N0 o0 E" |* N
是不是需要在DSP.CFG中进行配置
3 @6 T( q: c, L) |( y1 r( W我现在的配置为) [- w2 j/ E' L) L4 w( y6 }

$ `  N# I& o. P0 o0 ?/*
5 D* O, [, ^' `5 H; I5 R *  ======== Operating System Configuration ========
# q8 J& w9 u) A% c8 t */
4 t8 C6 ~# k- p; Z8 g: G# n% X/ t
/* no rts heap */
6 E% I4 j# J! N; pProgram.heap = 0;$ M  n5 W& E8 n
Program.argSize = 100;  /* minimum size */* k! D4 h7 z% @
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大  T/ l1 t' N# w6 M0 }' ]# u0 a
, ?  |6 r6 Q- q% H, T9 A, {
/* create a default heap */. u4 y# _9 {8 Z& u7 a. U( \: v- h3 X
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' c* Y" d# ?5 z3 U7 I( ?! R- M
var heapMemParams = new HeapMem.Params();% I! B' z1 N4 b( c
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
- b* M4 d$ b6 c/ P. T; K4 e5 s
& l- w9 H' @' ]* x; k
var Memory = xdc.useModule('xdc.runtime.Memory');/ W( j" W9 I. w& {! n  M% m) V
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 v/ {' b  j! U5 R2 |+ x
7 L8 n! v+ @7 s9 w' b+ r
/* configure System module */
# ?) h# |. e) a: \/ svar SysMin = xdc.useModule('xdc.runtime.SysMin');3 }  L& q% V1 @# p
SysMin.bufSize = 0x1000;1 D4 b* r* R2 m  a
SysMin.flushAtExit = false;
* \& G0 \3 H+ X$ E% a$ L3 W6 [& Z: P$ a: k/ ?+ y
var System = xdc.useModule('xdc.runtime.System');
5 o( u0 v. U) Z# ^5 G& _+ ]2 QSystem.SupportProxy = SysMin;
1 M/ h! M. c3 d5 C+ d
9 y. f) y. `3 }9 m4 b) D: `- ^/* configure SysBios to use the lower half of Timer 1 */
* e* L1 l/ y( b% m4 d3 R$ r& F! nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');: l+ z& T, v0 G( t
var Clock = xdc.useModule('ti.sysbios.knl.Clock');% K& {$ l2 ]0 E% @1 c
Timer.timerSettings[1].master = true;: s4 O4 O& ?1 d& W' X( J& }
Timer.defaultHalf = Timer.Half_LOWER;
( k+ v; f4 m! k' u( wClock.timerId = 1;% a1 Y% B  d2 F4 t
9 W0 t! t8 B) _4 ^  H$ E4 C

) X+ c8 m  u3 ]9 S( B7 J& o/*
$ G5 _, K! X" O/ v6 k8 M# h *  ======== Miscellaneous Configuration ========
( _3 `" n# s2 l# Z" q */
% Y; L3 |& _2 b
0 N. x+ X  T8 ~% m, z: ~  e/* set default diags mask */5 P1 _2 ~% V+ \0 c
var Diags = xdc.useModule('xdc.runtime.Diags');
0 ?% T# Z6 i* u' |var Defaults = xdc.useModule('xdc.runtime.Defaults');
" o! M' G1 E7 E4 J8 k% b" S+ D6 H- `' ]" E, }2 t9 P9 V) U
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
6 k2 q" }0 X3 Z, W. j( ?# x4 yDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( w8 Q, D& f3 Q& Y
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" L: T# ^& s3 u& Q3 i
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */, Y" b% y# d: j( A3 \
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" j0 @# D8 P" B1 Z8 C2 k! b/ ~
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  X* L. T! g2 f4 M- f0 DDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 `$ Y4 j" w  k2 I# P3 q" N; ADefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;! ~1 \- \2 m8 D3 j- W7 v
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. R* p- u. W; ~Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;4 I! P6 w3 c0 P5 Z
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- y- X6 B7 h  c' V" A8 M
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;0 A$ w( Y- X8 n* Q) M: @/ `+ N/ `, ?
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 X7 O5 |: ^; }# ~
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% R1 n! v9 m, B( Z- W" y4 n
5 s9 m' r; n9 Z1 F& P2 p2 U2 x
/* override diags mask for selected modules */6 ~% K3 [4 j8 b7 v$ h* ]
xdc.useModule('xdc.runtime.Main');
. I) V$ _, Y4 n& V% D; EDiags.setMaskMeta(. B  \* n, F- E+ w
    "xdc.runtime.Main",
5 S) R1 J& f4 U- i    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ H2 x& O' ?/ N4 G( |
    Diags.RUNTIME_ON7 \/ f1 k( j$ z; @% i1 S
);
( N4 }3 p, S3 D+ A4 c. l$ w9 \7 p# k1 D9 K- N( g  m3 U. n& o2 z2 K! @
var Registry = xdc.useModule('xdc.runtime.Registry');
0 p: R! d6 B+ Z' z- xRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 d0 x+ h: k! \- Q4 E
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  k$ H4 `& b. m( _Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;- v3 v: D! |$ j  [5 q
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;% i! Y& P" ?, o
5 Z8 Q) `0 ]; I$ ^
/* create a logger instance */
, S, B( g1 ~! H* J5 s8 S6 e2 \! Kvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 i. F6 J* ^1 |5 l. g0 B% }
var loggerBufP = new LoggerBuf.Params();
) M- J( S5 |7 N! ~& Q, D* Z/ m* q( RloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# c7 J7 V1 e4 YloggerBufP.bufType = LoggerBuf.BufType_FIXED;
8 w# X/ z9 b" A! v7 D1 E& |
& O  i  q5 h; c  k7 f3 Bvar appLogger = LoggerBuf.create(loggerBufP);6 k. l1 \) L; D. C
appLogger.instance.name = "AppLog_Core1";6 D, M1 F  ~8 t- j+ ~
Defaults.common$.logger = appLogger;5 p7 O% R3 O7 U$ k! u' J% J: w( f
Memory.defaultHeapSize = 0x8192;   
# h/ w  g; p3 q7 NIdle.idleFxns[0] = "&LEDStatus";
" _6 i5 d( ?* _0 FCache.initSize.l2Size = Cache.L2Size_32K;- r  E& V9 m% X5 J: q3 A
) {$ s5 {; U  Y+ a( ?2 q
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-14 05:42 , Processed in 0.041273 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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