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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& Z' e, X. d+ r) c* n/ ^5 L6 b
- V# I3 a$ u! g9 h3 l    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! v+ D, }* N; T" R  P& R* l1 w) }. A; K" I4 u. L$ e/ Y) C* _
其他程序段。。。。。
- `- |! \" E; D; a5 q. _8 B0 \; \ 6 B0 j8 N5 b5 O
   free(x_d);! B! O3 q3 G& Y/ c

" |( h' L" X( C$ C- x使用DSP侧单独调试功能,验证动态申请没有问题,
) ^" c0 D7 G# e8 i
; y  j2 b, y; y% a! K2 K: @但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ s& a6 c' O, L
& O- n& b6 S9 [/ {$ F9 t
" v  |7 V% X0 A2 Z
( [$ G+ P8 `9 ?7 v/ l/ ?6 |( r
$ O* I2 z8 x% T8 y, O/ N" A# T
0 y6 e( V+ x2 t9 i8 D' x6 g* W. t
% R9 ~# p1 ?- T0 _+ h
2 m0 r7 U6 F" I0 k

2 J. o- W; X+ N3 ~% i+ }9 C* F6 {9 U. `' U4 f4 `% G) [1 _$ j

! h1 s! [( Y6 o4 B
分享到:  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 */- P5 P$ ^) Z! j' H
Program.heap = 0;) X5 g7 k4 R3 f$ Q# o3 @7 R8 B' @
Program.argSize = 100;  /* minimum size */8 b( m- c3 o( U( p! ~) o
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */( x# _- A# y& f6 _1 J8 l; ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& m7 ^* P0 r' |" V/ y6 Lvar heapMemParams = new HeapMem.Params();
! A2 D+ J: c  yheapMemParams.size = 0x4000;  [; u/ b7 x3 ?/ x, a# G

* W7 S; T. ~, u9 v+ t: e6 tvar Memory = xdc.useModule('xdc.runtime.Memory');* J7 H  r& S9 N7 a* ^# K) f1 Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, ]; g6 \3 J9 M# V

5 c& l- N0 S& `* o5 l( s: P我大约calloc  每次共计大小为5K*16bits,: ^% }2 e! w4 r( ?
而默认配置才0x4000、需要改大。! k: x0 ]$ [, L9 W# F9 r
9 [- W+ ?7 H' T% [+ Z/ ?, `
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
& q. ^; j5 O/ U) k: {我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' M3 j) m$ q3 [7 e
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 w$ |1 m5 W- t8 E" r
9 g  ]' C7 R- h
是不是需要在DSP.CFG中进行配置
- ~8 r% b6 T$ E6 d0 t3 @" D( z我现在的配置为
. }" w! \5 J, ?7 d+ o& f0 T3 t! z" R5 u- D. Z; Y: @  ^0 T2 M! r% J, B
/*
2 H8 G1 h  A2 R( e! C4 D4 O *  ======== Operating System Configuration ========7 P" Y5 ?; _  m5 n" j, v
*/
; K4 a7 v9 z! i9 R8 ?/ Q* n5 D/ H: Q5 U3 ]/ |
/* no rts heap */( u5 z7 R8 v) i
Program.heap = 0;
$ {# ~" Q8 I1 G; NProgram.argSize = 100;  /* minimum size */& o1 X0 `1 ^* W+ }2 ]1 K7 w) k& e
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: B6 _) l/ y" B) Y- z
" i, c8 S- u1 `) v2 l( S% P/ p* `1 @
/* create a default heap */
) q/ \$ D) U  u+ S* Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 y) V) C7 n% X6 X0 L
var heapMemParams = new HeapMem.Params();
1 R; t% P6 \+ D# p3 q) G" \heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 v# P+ q# Q- z# W1 e
; \3 {4 F3 M  q
var Memory = xdc.useModule('xdc.runtime.Memory');! ]3 P- [# T' t  u- B1 _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% f/ F$ k3 ]  {) \$ h3 N  }
. Z% c/ n2 `2 S/* configure System module */8 p/ ~/ `  X+ B$ l) {" B7 B
var SysMin = xdc.useModule('xdc.runtime.SysMin');1 r( ]# U4 ^. J# }1 N; X
SysMin.bufSize = 0x1000;3 M. O9 J& }# ~5 a) K: m
SysMin.flushAtExit = false;& G! {) V2 F2 g4 |% z
8 l$ e1 c; t. T, s! h* N- l1 W% p
var System = xdc.useModule('xdc.runtime.System');
4 F2 r8 L+ C7 {& \' fSystem.SupportProxy = SysMin;2 ?" r( d9 j: J1 a$ s
6 c$ k! {( Z( e! R5 N0 G( f
/* configure SysBios to use the lower half of Timer 1 */
* O9 g! c$ C' y6 S2 jvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
) d- n! u* Y: H0 V+ }0 [4 Wvar Clock = xdc.useModule('ti.sysbios.knl.Clock');" g+ X% d  e2 p& L* M/ j* s
Timer.timerSettings[1].master = true;% c& N$ d! x. R( V
Timer.defaultHalf = Timer.Half_LOWER;8 c& v3 i# |: E; u
Clock.timerId = 1;% J9 Y& |: L6 m

/ e: E+ q4 K) I/ c# m8 [% J  P% s$ L
/*
" V/ ^- {5 c: M" Q( q& d5 a  n6 a8 d: w *  ======== Miscellaneous Configuration ========
2 W. r& N. G% |1 P$ l */, }) R3 F/ M( r9 U, Z$ Q. {: _
# m5 x0 ^3 n- Y" z" }. A: ]- ^
/* set default diags mask */
* _0 X2 Z( V! }var Diags = xdc.useModule('xdc.runtime.Diags');! M3 S: ?$ w- t$ c9 P0 I* d
var Defaults = xdc.useModule('xdc.runtime.Defaults');, H8 ^& D% K& P& C6 q% _
* A! r9 K8 X5 r9 k
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 Q- S3 _1 J5 N- `* b& {' GDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 {4 s" l6 ~2 d
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 ~5 v* T( v" B: k0 @
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 y0 m( A- Q2 U: E9 B
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 K  a! c. m' z+ O: f* @5 `, EDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 b" p$ u% B8 Z1 o. ]Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 P, f# |$ D6 g! |6 W1 G6 LDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 e  Z  Y) G" U4 G3 eDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- g: o) M- r0 J7 {1 Z: p/ o$ B
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: y: {+ q4 s" jDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 N; x% f5 F. S% X3 ZDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 v) U3 u* ?( H, NDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# D$ O' y/ ?4 R+ _, ~9 R4 y  X7 ?! [
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
; S% {% Q+ e* M! U9 c: \+ ]6 K  P- T; s2 o3 v1 _
/* override diags mask for selected modules */
# o; k6 Z& y2 o3 F( q, qxdc.useModule('xdc.runtime.Main');/ o, j  T  K2 I8 S5 B! L# ^8 n
Diags.setMaskMeta(
1 ~0 o1 {$ B4 I% n7 M    "xdc.runtime.Main",
- V! A+ ^# T* Y$ o, m    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ Q; a7 Q9 f  B5 i6 S/ l0 ~
    Diags.RUNTIME_ON: i& [- T& X- E
);
& `3 |+ `( d  v0 f' m8 s3 ]/ b  i2 G* ]
var Registry = xdc.useModule('xdc.runtime.Registry');( c8 h8 o$ Z- W, G* g) x( J
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  n1 G; e. P6 cRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
) ^' F% M* j* \; e* s5 E8 o! PRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 L7 S/ [' C( V9 e$ jRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 P% s' z8 N- }0 ], Z

. q7 {& W$ `- l$ r, M% }) v9 I' r/* create a logger instance */; Z% o" [: f1 v, u4 v: e
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');0 Z! `3 Y& o  p% R) x- f! [
var loggerBufP = new LoggerBuf.Params();
" E  W6 w4 V8 G; N2 z, S3 m, c3 p# GloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 H% {7 K4 t( l; s3 H- r6 k2 N
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 x* Q% \1 K2 y& c- T8 L; L4 m9 k
, F8 Y) k- l5 ?) @var appLogger = LoggerBuf.create(loggerBufP);
# z2 R( G9 y! L6 TappLogger.instance.name = "AppLog_Core1";9 A" s, h( x: B" [4 }! |4 t
Defaults.common$.logger = appLogger;* \: i2 V6 M% l, f- p2 j) S" k
Memory.defaultHeapSize = 0x8192;    5 G: ]' w) c2 ~3 y' ~+ w" B
Idle.idleFxns[0] = "&LEDStatus";
& D5 K! [" p* v5 q# A3 nCache.initSize.l2Size = Cache.L2Size_32K;
8 X; c( [# G1 j) v1 y* L! y
- g- y# A* k4 n- T3 ~: |4 h& I0 w2 E
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-21 21:47 , Processed in 0.041974 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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