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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构/ Z/ `  p- C% D2 G8 Y: |
  p7 c7 ?5 R0 s" ?# d. a
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! c' w* Y& m. i1 |- q% y9 D

9 G" U( _. q# M0 R# D其他程序段。。。。。
! Q6 \! C6 Q5 ~7 C
, @8 P- ?) u( e# N2 j8 b" E   free(x_d);  X7 q" R4 Z- L3 ?

" }# U4 x3 I/ M$ X使用DSP侧单独调试功能,验证动态申请没有问题,
5 ]/ F6 `7 s3 w. d! |* S' p$ D0 C: Z2 a. y/ g: t5 |8 C
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
" L0 Y- O$ b2 B
8 C8 B* V# a% g/ Z7 g! w1 Y
! ]: D1 h* X0 y) ]. o
6 ]3 x; h& }% V* R* q7 q7 K) h

$ M+ }, E) g) k- f) _0 p
7 v& i2 N# H; L
& m- Q2 Z4 g% ]* e% D& C1 v2 p7 ?) [  m; G% t
6 k8 G! n( C' h, }3 S, T
, I% F( y  p, ~2 V$ g  `  h* N

- ^# x& b3 H  A2 H( Q5 v/ Q
分享到:  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 */
. z, z2 r. m' G. W( ^% dProgram.heap = 0;
; X  u1 c% ^! z4 {Program.argSize = 100;  /* minimum size */; A  d" M, C9 H# s& n/ a
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */" f0 f% G3 |0 x1 A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 j3 z' C1 M3 n7 U
var heapMemParams = new HeapMem.Params();
( g2 [% ?6 S, K' z/ _heapMemParams.size = 0x4000;  B- \% r5 y2 ~: K, ^
2 Q; V. j) y$ D3 f* Z+ {( j1 Q: `
var Memory = xdc.useModule('xdc.runtime.Memory');1 y/ w' x! y4 p' p" H+ [) |
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) m+ E6 T- X. S7 H! \) n; K. f
" w- x" e+ J& x; L. g0 T- r我大约calloc  每次共计大小为5K*16bits,3 y6 w1 t" `& j
而默认配置才0x4000、需要改大。% w0 T1 g9 f8 X8 P! h+ a! b

7 `( L" J' O1 z6 M) ~' t& F* `0 h
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明* h$ E, O* w& g9 I" {4 [
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下% D" \1 v& k/ e& N9 u9 [6 n: K
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" W. U( _0 P0 C  K# V- p

/ h2 X1 Z( L- ^5 \是不是需要在DSP.CFG中进行配置
- p; s9 [' r1 S3 I9 N) N. S我现在的配置为, h$ Y4 f2 p8 D9 f0 G$ i1 F2 i

9 O0 N% z2 ], x- |7 v8 Y/*. ]& j5 F4 w+ ^: v) H" e$ ]
*  ======== Operating System Configuration ========, W, C* m/ K- q0 t/ j+ x$ ^* E
*/
: J; M( J$ W" D3 _: W1 ~8 z0 B8 @; y. S' M$ u) l  c4 D
/* no rts heap */* L5 a( t, ~5 p# K, B1 T
Program.heap = 0;
9 T; C2 @# u% f5 RProgram.argSize = 100;  /* minimum size */
1 E- Q6 }" E) I  ZProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- i5 ]. O/ d9 m* V6 o& g; r1 W1 i
  S1 i3 g% J# z% f: u1 t/* create a default heap */: [3 U9 I' Y- u. f- V3 f! X% w. p1 g4 U
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% N# d4 Z, Q4 mvar heapMemParams = new HeapMem.Params();. s8 u! Z- I2 G5 l$ m' M
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大7 M2 d" R; g; O% |$ a+ |! Y
8 O/ P( O6 [1 p) E  ]* R6 u
var Memory = xdc.useModule('xdc.runtime.Memory');
7 m$ o6 Q+ [; t- ~" {/ _  AMemory.defaultHeapInstance = HeapMem.create(heapMemParams);) i& E# t( ~. \1 \* b9 q
1 k' n' p1 Q; ]% \0 f* m
/* configure System module */3 t) G. |7 P4 t2 H- S2 C
var SysMin = xdc.useModule('xdc.runtime.SysMin');
/ A+ j3 }. {& ~& eSysMin.bufSize = 0x1000;
$ `2 b* u9 g' C* ?SysMin.flushAtExit = false;0 K& J) n8 b1 W6 A1 ~. q) a
1 q& E  e% E; k0 Y+ \
var System = xdc.useModule('xdc.runtime.System');+ n7 P) V1 A# k
System.SupportProxy = SysMin;
0 G& B  N& X6 r
: y2 k) V* E: Z& A% t* b" S/* configure SysBios to use the lower half of Timer 1 */
5 Z  G, s  ~& o9 g  ^  D9 Y6 L4 |var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( Q% s1 ]9 i. d$ Q0 `5 d. c" C' [& K
var Clock = xdc.useModule('ti.sysbios.knl.Clock');* ^, s8 r% f3 A. o9 f+ Z
Timer.timerSettings[1].master = true;- e0 N" a: C& i: `) j: \0 l! B, r' I% A
Timer.defaultHalf = Timer.Half_LOWER;  J2 J3 {2 O2 ]
Clock.timerId = 1;- p" i% n6 c4 A5 x6 Y2 l% G
6 W+ G! h* ]; @6 }; n, g: x( _

- V- @$ K) y# p; V) d7 I5 S/*/ m+ c7 H' A9 Z
*  ======== Miscellaneous Configuration ========7 s( H; X: W7 R* l4 X' v
*/
0 \# ^9 t8 a3 o3 y; M9 d" h0 h' i5 b+ u  Z7 b! M
/* set default diags mask */
- V1 U+ p2 ^3 }var Diags = xdc.useModule('xdc.runtime.Diags');* |3 w0 V5 y. w! N. @8 o' C
var Defaults = xdc.useModule('xdc.runtime.Defaults');
- ?' w! t( s: V7 l6 r) g, h0 A" e) Q# n' `% Y* G7 o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;; ^& A8 a' O5 y* D0 N' E. F
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ _! B8 `7 ^9 F% |- |9 O3 GDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% J$ p% S9 n  [! M& \Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */, O$ e, S' G; a- ]7 a4 p" R7 \
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
" S& R/ @4 i7 {/ G3 E0 t( X4 {Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
! G' C& h; n' `. ]" ^4 qDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# w! ~4 Z3 t: ~
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 L$ B. ^* Y* b5 I$ M$ E9 DDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ l% r# q7 V4 G6 a' [% ~Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
6 U. a! g" }( I. T4 s4 jDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  y3 V. ^7 z( @4 GDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 D$ E# M( ]' d
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;8 Y3 {! h- |; E! E
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( n0 W' |8 l/ Y# j
. U) P- K! _8 K5 F4 ?  H6 c
/* override diags mask for selected modules */
6 q7 F, m! r# y8 I. M. h6 c5 ]: ]xdc.useModule('xdc.runtime.Main');
1 s+ n7 H# t; r9 g3 M7 {Diags.setMaskMeta(7 G' m& O& v3 R3 l$ p: j
    "xdc.runtime.Main",
4 s3 g% l: u( Q/ ]2 E3 {0 R    Diags.ENTRY | Diags.EXIT | Diags.INFO,' O2 }* Z* h- N& ~: }& l* p+ L/ i/ c- Z
    Diags.RUNTIME_ON
- {  {/ Z. @6 C, c3 ^  c8 {);
1 u8 @" w2 B9 D4 A/ N
! U5 E9 P+ D! Y2 N/ n2 y" z/ e) N6 Mvar Registry = xdc.useModule('xdc.runtime.Registry');& p) U( n3 m* {7 p& ]' m
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! u1 j+ }# ]: J1 |5 \
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 W8 _1 f: ^7 L& o2 NRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 L: R( s. D0 x  r5 [* p: v# S
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" m/ {4 S2 M1 M$ p% P4 v
' V; G# Z. h% q- C/* create a logger instance */8 ~  j& s* y) J# E. F; ?
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. G' [& f8 F2 ^! X. g$ ?3 W
var loggerBufP = new LoggerBuf.Params();+ f3 [" l8 i: z
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( d1 s( c1 B1 K8 N2 g# Y* wloggerBufP.bufType = LoggerBuf.BufType_FIXED;
, _& k' C; Y9 P9 p8 D  D& u) `' q& `4 ]' V# L4 w7 Z5 s. n
var appLogger = LoggerBuf.create(loggerBufP);
5 G) s5 J5 H, g0 {appLogger.instance.name = "AppLog_Core1";
* a& x) Z7 @) p$ jDefaults.common$.logger = appLogger;# A/ d! A* o9 }- b
Memory.defaultHeapSize = 0x8192;    % ?* c& J" p; p
Idle.idleFxns[0] = "&LEDStatus";$ p8 q* H6 H% ?4 J' ]! d
Cache.initSize.l2Size = Cache.L2Size_32K;
& \8 i! u1 z$ k) W, @; Y5 G: M% b9 e
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-20 17:13 , Processed in 0.047629 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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