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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& p- y+ \- f# Y/ Q" `' K3 a6 S
' j/ d6 c$ ?; Z& G; j: S
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% d5 m& r$ `3 ~, Q
7 \, R" d4 S/ s+ p( \
其他程序段。。。。。( T8 x# C7 w" y$ ]# V+ R, O

0 y; {3 N  o  ~- l, I( \& i) I   free(x_d);5 s; T: A7 M" r+ O1 c. |$ S! A

$ i7 p3 @/ b& T1 p1 W2 I2 d使用DSP侧单独调试功能,验证动态申请没有问题,
* `8 e( C5 C+ q% l) A) J
3 ~. K* e4 {; s9 f& s& L  g但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, P" v" @0 d! I4 y0 S% i
. ]. Z0 [# O1 \1 U8 G8 D

2 k6 ]; V7 F$ C$ X6 j) M% @
2 p' i  @& l9 E+ i$ K/ M6 Y5 J. V9 n

1 z+ @0 X+ E) I8 Z  ?- y4 Q% Z+ B- x6 t: [! ?3 |7 D# v

- i* P5 U; L! h- Q: r' ~1 U
' d. {# y- i# W, @+ E
4 W$ X: Z2 X7 Q" D: \4 L2 h, b+ R/ D4 o1 ^
分享到:  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 */& }* j9 y" K: p& t5 t
Program.heap = 0;
: U+ G1 I5 g6 F* l5 [Program.argSize = 100;  /* minimum size *// }, N# }0 ~) p2 w
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */. K  ]# E9 l5 p/ M" |/ S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 i" B2 n9 a5 g/ h- x7 u; V5 d2 j
var heapMemParams = new HeapMem.Params();2 N& j( p* K7 ]1 x& b$ R2 P
heapMemParams.size = 0x4000;5 s5 R0 G4 X/ }3 \0 j8 }* c
5 k  t6 U1 W7 Z4 v
var Memory = xdc.useModule('xdc.runtime.Memory');
/ ~* p; T8 @7 vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
: x* x" q4 L2 g# g1 H5 \" p: T0 x! V* f- T
我大约calloc  每次共计大小为5K*16bits,
3 \) o3 Q: r) g4 t9 q! N而默认配置才0x4000、需要改大。
3 r% k3 L  y6 O* v
9 [/ j! F% \3 r( 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 | 只看该作者
补充说明
" y+ N' f2 m) Z: @; s0 d. l我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" k+ q: A) d& G2 V6 F+ x7 L
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 v, [4 A* H' m; @9 D. w  M, D
7 O; F' I/ g. N/ P4 g
是不是需要在DSP.CFG中进行配置
( `+ L* i" m! ^, Q" ?我现在的配置为/ T+ D0 P9 V* o3 ]" O( }

( @6 D* \( D, _5 n( F% U1 h/*
, N- ?6 W( u6 H% ?+ {1 q1 z: e( j: ] *  ======== Operating System Configuration ========
3 k+ f, ?8 h1 _ *// |. b8 X, W% x
( C; g0 j: u1 @7 u& t5 m
/* no rts heap */
! A9 `: W) ^- BProgram.heap = 0;
3 v) }# @; r: T5 `9 b  F! o4 I6 sProgram.argSize = 100;  /* minimum size */1 \& ~: Q3 y7 s0 }& e" @
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: y. a+ B+ h+ T5 Q# U
/ m. S# @: ~! A/* create a default heap */- a( Q4 ?: p! c/ q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: j# Q! p7 B% u/ l# N/ \) `; k# lvar heapMemParams = new HeapMem.Params();( D* h" Q% I" S5 v5 W
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
8 y$ l# J+ v0 _% ]6 M) T: U0 k+ O: ]1 l
var Memory = xdc.useModule('xdc.runtime.Memory');
/ Q" i; A" A" u- x$ S+ u7 f( d! C6 H! EMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- q: P! T  x; \2 y" \! J% h5 v( ^6 M! T) \$ [8 L
/* configure System module */; [& V' i) _! v8 j) }
var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 t+ x) |( \' G1 W0 b2 ySysMin.bufSize = 0x1000;
2 f# l7 \* [* z  F' ^8 S3 G, DSysMin.flushAtExit = false;* Q# [) k1 |; ^1 W3 z3 y2 }7 n8 P

& M) N3 e. z. J0 Svar System = xdc.useModule('xdc.runtime.System');
2 w1 A# i/ a7 _3 ~System.SupportProxy = SysMin;3 P  F3 K$ p1 K( i
, Z2 x1 e% J' Q5 R
/* configure SysBios to use the lower half of Timer 1 */
0 t/ |8 Y: ]% ]6 a8 j7 Fvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');7 e; z) l6 X2 _' ?" c0 {' I
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
1 e6 |! ?/ |) Y1 e& s# O8 PTimer.timerSettings[1].master = true;8 ^' W, j* W# V, v( l  V- F" e3 l
Timer.defaultHalf = Timer.Half_LOWER;( h# i* q8 k0 E* C7 f' [' e0 P
Clock.timerId = 1;5 K$ w1 w" O1 n7 y
5 u/ e5 r' w0 o# ?" v/ q* k
! Z; f& r$ R# `0 V
/*
4 {  _+ Q) ]" ^- G *  ======== Miscellaneous Configuration ========2 I; j7 i. s9 t: n) h! m
*/" I2 y8 Q- b) l

1 F) d9 W1 a, p/ S3 E; ]7 A/* set default diags mask */* W9 I5 V% O$ I* ^9 |' b9 h; q
var Diags = xdc.useModule('xdc.runtime.Diags');
- Q" G# E; Z9 \" W/ [, F" Z. nvar Defaults = xdc.useModule('xdc.runtime.Defaults');
$ K& N% r% E6 @: @+ f0 Q- S: E- p' u, C1 u7 E5 b# M
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 v0 g" y, L9 {" G! hDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
- L) O1 g& P) F9 mDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;+ I* n- T, [8 n3 Y3 w4 z, C
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
8 S, y* F; J( b5 R0 @& rDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& I2 E7 s3 z  r9 R1 YDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 t" |5 F3 A0 h/ iDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  A0 [& u; u) L' G1 l2 g" UDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  S  m, Z% d% p0 H2 IDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 y$ B9 ?! k8 J7 Q2 x/ C6 n0 ODefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
1 O7 m6 C, d# _$ X. LDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; w1 r, U  X, `" l+ R
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& a* ?$ C- G" ~4 [4 x
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( l, P( k; q- r$ ]: m( t( Y' lDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) j* Y2 b; a' D8 }" Q7 C
0 O% U, z* H( h# p+ i0 |8 w
/* override diags mask for selected modules */
8 v# F. Y4 Q. o' l6 X) Oxdc.useModule('xdc.runtime.Main');
& u) }9 i# Z: X. a. WDiags.setMaskMeta(* W6 Q& E0 C( R2 A4 c* [1 K9 _7 K
    "xdc.runtime.Main",+ N5 `. t+ i, k
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
7 K' g1 f; u+ o$ h9 y1 E9 S    Diags.RUNTIME_ON1 S' N, P4 X' A0 o! `: b
);2 t" E% q) E" U. f% Q5 ]

5 b. Y+ n; C' @' P3 r  Svar Registry = xdc.useModule('xdc.runtime.Registry');5 ^7 w4 ^' w0 \
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ G: q$ d( |2 X+ I  b
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! Z- P7 l5 C, ~- ^: s
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;8 w, h% G  t2 V4 x7 J8 ^
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 ]1 c" F2 U$ n  z3 K3 B2 Z+ H, g

, O% v( H5 W9 u% R/* create a logger instance */
( F* j3 ^8 Q' _2 T1 l: Jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( u1 O% H4 j1 k" H, H6 y7 u
var loggerBufP = new LoggerBuf.Params();
% f* F+ h. B& _( P/ qloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* H/ a; H, P" `1 m, floggerBufP.bufType = LoggerBuf.BufType_FIXED;+ @8 m% Y7 }+ f  `$ c" T6 E

8 U; H7 \2 |! q8 L! t6 n5 hvar appLogger = LoggerBuf.create(loggerBufP);$ {# M$ r5 `4 x* I% l  _+ i
appLogger.instance.name = "AppLog_Core1";* o$ `5 W2 m- x$ h1 M
Defaults.common$.logger = appLogger;
" W1 l  U' D' e# z# kMemory.defaultHeapSize = 0x8192;    5 t* E& f% e( L1 p
Idle.idleFxns[0] = "&LEDStatus";
' ^1 H7 }7 U+ zCache.initSize.l2Size = Cache.L2Size_32K;( c0 `7 m+ O7 `. J' j; P+ i

1 z9 a$ S  c0 E' u  m/ x7 d  b
回复 支持 反对

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-12 17:52 , Processed in 0.042737 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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