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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构( p+ w' W7 T) `: d
, z! T$ j/ z% h4 y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 A1 k" j- Q2 C/ r& n

% e- Y8 }5 u" i其他程序段。。。。。
7 {6 C* I/ ?5 T
4 u# t- L. B5 ~8 m$ d, C   free(x_d);
$ i2 {" g* W. D% O4 q7 l3 p! o
8 k; G  D7 a3 {4 ~  I使用DSP侧单独调试功能,验证动态申请没有问题,
+ ?: r, a. H4 G8 e/ m
( C# c* O) y- E7 b但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 ]0 `6 i) S: s) P2 R2 m

0 o9 B" [, J/ H+ @# h' r2 {, J: u1 V) @* D

0 }1 u1 ~  R% N
5 d) o! B7 X' r/ B
6 g. X7 @" P! c$ i5 D$ @7 a
* |5 _( l- u" l' B, U: G( o: |( E0 O) E3 t! o+ [9 G

& }4 D3 F+ [  t9 g5 E9 y4 x4 G$ E
4 R1 b7 g) ?0 \1 s3 U# Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* z" x! O: c7 V5 s/ u& B
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* }5 a: n; _+ q. ~(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& t! n8 T3 Y  O, _& V$ y
- z' H. V9 K; M0 [1 `% N
是不是需要在DSP.CFG中进行配置
& X# M( [3 D7 o' U8 O8 G0 e) q8 A我现在的配置为0 n) D$ T" F2 z! k. u
$ |- `% Y# ]4 X. S( |0 T4 h) w4 z' d
/*
0 L/ y' D1 N5 t% a8 w *  ======== Operating System Configuration ========' q: V" U" N- z1 k3 b4 B, v5 _
*/) {! ^" ~) I5 J0 k3 t) R/ y3 ?

# T1 n, ?/ _  f' P/* no rts heap */# C% n/ V0 ^/ H8 W% y- u# b
Program.heap = 0;
- n% d' t& |. C, qProgram.argSize = 100;  /* minimum size */& y) [% M- ?& J- l
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 u( r4 b. W0 |! X$ x

& t1 V5 l4 e% i/* create a default heap */2 p* m+ `6 T2 a; g/ @0 O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 ~" F8 @/ v1 ?, [/ T: k( g; uvar heapMemParams = new HeapMem.Params();
) y2 Q0 i4 }" Q! @heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# ^: h6 G  o) O: O# t8 d/ T4 B" b& n
var Memory = xdc.useModule('xdc.runtime.Memory');1 w; t1 _# S. u3 S( K- e$ {( d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 }: N( p6 F0 @" H) z& c& y1 }1 |% c: E. T2 Y7 A- R
/* configure System module */* g2 T4 p5 Q$ V
var SysMin = xdc.useModule('xdc.runtime.SysMin');
' u& I0 }8 A- H" l: ^; i. @SysMin.bufSize = 0x1000;5 N9 K6 A7 S$ U' T$ ^
SysMin.flushAtExit = false;
8 d! k/ h  {  l. a$ U! @$ M8 b& H. v, D6 ^
var System = xdc.useModule('xdc.runtime.System');
2 y) `2 M# K, fSystem.SupportProxy = SysMin;
1 ~' O7 W0 S$ X- y! m
. s( b  d( T$ S( Z! q/ g1 R* ]* h* [- V/* configure SysBios to use the lower half of Timer 1 */4 A3 Z9 @# {+ K$ h
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 \7 V$ j5 u/ u8 G+ ^: x! v
var Clock = xdc.useModule('ti.sysbios.knl.Clock');4 J6 A/ l; |5 s1 y2 z$ F" G
Timer.timerSettings[1].master = true;
/ l' I  I' t. sTimer.defaultHalf = Timer.Half_LOWER;
/ }% I# Q7 z7 ]- y1 G& lClock.timerId = 1;- ?# V7 N# K1 P- }6 f  b

( {8 ]3 \# f+ s- T- X* q2 ?& `/ t) M* k% h  T3 F
/*
1 z1 K6 |7 K, n; s/ s) d8 R" a1 D* @& A8 c *  ======== Miscellaneous Configuration ========2 L4 R0 s* R- U# n
*/* S& z: \3 E2 F
& I/ y3 o4 T3 I: x
/* set default diags mask */
7 c4 v) R7 b) p/ `var Diags = xdc.useModule('xdc.runtime.Diags');$ |  b% }) m# U0 J1 I
var Defaults = xdc.useModule('xdc.runtime.Defaults');
: O1 O: n, D' v) e. v% ~. T6 j' M$ `8 U" ^9 @3 L6 V3 @
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;  [8 ~: ^) _4 A7 f: ~
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 Z, w- x1 r  LDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 D5 G* A6 Y4 m
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) `, _% h2 v" B5 U( lDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */: K" S3 k$ b: q$ ^
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' a- H0 K: N9 X$ k9 t1 E' nDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 L6 M4 C* v/ E: u3 I$ o
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  l! H4 o# _9 }( p2 cDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 B2 L( [" R/ K6 Y- C0 g+ _
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+ g, ?7 U  q4 e  s1 |+ J- XDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 A  A) e+ m5 T* c' e- uDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;# R; z6 O; C1 m) y& Y+ K$ K  U. R
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
" b6 H. k/ f5 W3 k' c+ sDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% @4 {9 H! P( L# S6 A* n2 ~/ s+ _9 ~8 n
/* override diags mask for selected modules */
) v8 m1 c5 `+ j& x+ [( u. f+ Cxdc.useModule('xdc.runtime.Main');
! F, [& ^, B: @- [! B  O* O: ]Diags.setMaskMeta(3 d: Y5 Z* L! L; I: r
    "xdc.runtime.Main",
$ n. e; C9 X! f+ c    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 Y# o9 g# _: X    Diags.RUNTIME_ON
! r6 y; X2 O( [' ?+ E# L);
  S" s- _/ ^* [/ B- I3 n% ~6 [  m1 n. S# J8 o
var Registry = xdc.useModule('xdc.runtime.Registry');0 [- s) `7 h9 i+ m( J6 }" Q
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
, l; f. ]% L/ W, Z7 gRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 K" Y, p9 n5 k4 v* k, q
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
7 C2 K9 ~) p% }, `! U( b4 P4 p: ~Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;" G+ J  `5 _. x$ T7 }
0 W, B+ [- L) \8 [/ X
/* create a logger instance */
- S5 u6 d' T$ h0 \var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# H1 f! E" y0 j, a' J6 r
var loggerBufP = new LoggerBuf.Params();
' ^  r, Y8 S/ @! O6 }+ Z3 `/ d5 AloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) G# T6 ?/ G% @7 p2 R1 ?$ A) u' S
loggerBufP.bufType = LoggerBuf.BufType_FIXED;# s6 p6 }4 d# _; v6 Q2 ]4 z
5 u. j2 z9 Z- O% i* C& U  a# E
var appLogger = LoggerBuf.create(loggerBufP);
2 S; Q' V* O1 A7 b6 G  yappLogger.instance.name = "AppLog_Core1";
4 d. S- t. U" T# b9 p% o  e+ J; TDefaults.common$.logger = appLogger;4 R( B# q0 E- A7 w; Q* D# Q
Memory.defaultHeapSize = 0x8192;   
. J) Q& S" P( i+ y' lIdle.idleFxns[0] = "&LEDStatus";
' Y9 |+ [; s/ U, vCache.initSize.l2Size = Cache.L2Size_32K;
% N0 o% B3 y; [2 g  k' Z0 s2 H% Q9 ^  N& H+ @4 C
回复 支持 反对

使用道具 举报

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 */
% }3 ?' x9 k8 X* G) s/ y% r5 Nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 @8 i2 E/ y# s; F1 e4 uvar heapMemParams = new HeapMem.Params();
5 {& ]8 }( R; b3 b. qheapMemParams.size = 0x4000;
3 d5 N1 q0 w, k8 Q! ~' L5 H2 [! Q: u8 z1 b
var Memory = xdc.useModule('xdc.runtime.Memory');1 K: R; M3 ~9 Q% @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ \6 n* d6 z$ a+ \5 |
9 G6 Z( G7 f1 F0 I0 f' L, S& i/ S
我大约calloc  每次共计大小为5K*16bits,
: c; {6 `/ K) M6 V4 {$ k而默认配置才0x4000、需要改大。8 N9 r4 t  B: @
! X0 ^/ J4 W/ u9 @: R- w, K4 j
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 D- ]9 g  _, M( E; {6 q
Program.heap = 0;
5 x# J- b( ^+ j3 L/ U+ r( y  c- PProgram.argSize = 100;  /* minimum size */1 T- x7 y& \* T9 J1 H  \3 p8 p' v* r; d
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-22 06:05 , Processed in 0.046014 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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