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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. K0 f* C( x9 V% Q9 E& p2 N/ @  ?) I& D* ~' r9 b" H
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2568 ?" L$ I8 _, q/ u# S. x  f' Y7 z

; u2 _/ _. R4 m4 l" M其他程序段。。。。。9 j) b! Y. ]% {3 ^/ ~3 v

1 x, y9 H$ e& L+ s2 y, V5 A# c   free(x_d);
* D1 Q" h) {& n- ?% i' ?2 ^7 _9 N  Q% g
使用DSP侧单独调试功能,验证动态申请没有问题,3 D: c* T6 b! s& z1 e/ a& o

0 f) [; [# l" S; |- o  f/ j但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 M/ l9 k; O) M( Y2 u4 m' ~& Q

9 Y# {% C  W% L, @+ O9 q1 Y/ _: ~" v

* e4 |- ~/ M& a& k( r2 }4 |* r$ S; u- {. g
+ L. q5 x, U$ k3 N

; Z3 D7 U: D4 [% Z8 [! O: E$ t: }9 b/ T
& {# X9 P* ]( S

) I. H3 P& Z7 ~: l) E. F' p7 y5 [2 t- E/ `: ~3 C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明) h7 ?( U# K, H! P( d2 {
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
6 p8 M# }6 y$ v% Z. X; Z8 {) Q(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 r1 O) Y: G3 ~1 D3 L
* c3 p% ?# O$ T9 S0 O* i2 t9 P# `
是不是需要在DSP.CFG中进行配置6 \  s* f8 L) N. D- f
我现在的配置为( t2 i( H) f9 v# U
* i! _; O7 h; H0 Z$ {4 F
/*
% d2 k9 i9 R$ [' r *  ======== Operating System Configuration ========& m. {/ }# x& J  e9 q4 Y
*/
# y7 S8 H' b1 o& P
! Y4 s9 y) {% p1 a% L/* no rts heap */
: l$ C# r" w) q: [) Q6 cProgram.heap = 0;4 U1 F) q* d+ g& O/ ^# R
Program.argSize = 100;  /* minimum size */
, _: E2 {5 C6 ]/ yProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
  {; z9 g9 M' S' h, V7 G. \
5 B  N  }; I# w* `& n7 z5 Y/* create a default heap */
9 ]2 ~9 R' j- E6 Y, p+ @% Y; f$ Hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 B" t2 \/ `. _: Z0 ]2 }" q
var heapMemParams = new HeapMem.Params();
! ]; g5 L9 G9 C) K; R. _; nheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 u: V2 v3 j( \) U- x+ g
" s5 k. r: D8 ?. K4 D5 {; a; J
var Memory = xdc.useModule('xdc.runtime.Memory');
: l& ^9 C6 Y) o/ g, NMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
" C' ~+ a; U$ X# o# R- T/ d
3 U9 N1 `" f/ B5 N0 h/* configure System module */
/ D( Q1 q0 @( j  n# y0 d; kvar SysMin = xdc.useModule('xdc.runtime.SysMin');7 l/ _! D5 W, E: u* X# `. F
SysMin.bufSize = 0x1000;
2 `& A$ R& O1 L! ~/ gSysMin.flushAtExit = false;
' e" u" F$ J+ }# D1 Q/ O  M
9 Z2 C4 k5 e9 Bvar System = xdc.useModule('xdc.runtime.System');
6 b: w' O0 O; ?; ISystem.SupportProxy = SysMin;- ~: z# z/ {& J5 X3 R
% I3 j& c3 @9 N. O* ~% Q) @
/* configure SysBios to use the lower half of Timer 1 */9 E7 D6 t2 w- }; v
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" Q. r! p4 {  F
var Clock = xdc.useModule('ti.sysbios.knl.Clock');- r3 w7 T9 [& Q" P$ A+ K' {' \. ]
Timer.timerSettings[1].master = true;  c0 q: x# u' M/ C5 a8 ~
Timer.defaultHalf = Timer.Half_LOWER;
# J8 a  W& f8 j* CClock.timerId = 1;
+ b, e& O$ _5 R0 z, `/ p6 |: ]8 f0 c% j& ?

3 Y" ]1 r) v$ O0 E! c* D4 l5 Q# F/*, G! g( O) ]$ U5 N9 Q
*  ======== Miscellaneous Configuration ========! K) j9 g+ f; C$ _. L. }# R
*/
5 ^) x* N1 `  ~2 |& P; h$ a* }# ^8 W+ W! `3 x& V9 }6 t1 z
/* set default diags mask */
2 h/ t  R) R+ |5 Fvar Diags = xdc.useModule('xdc.runtime.Diags');
  E0 k, H5 W0 Vvar Defaults = xdc.useModule('xdc.runtime.Defaults');7 C1 G1 z, s- _3 v" c: t
  ^+ a- W# h* V! a
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: x/ p2 K9 e8 z
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;* q5 ]# q- m1 O) ]9 y; F
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
( S+ v5 d8 ], x/ h, TDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( k  _# r$ X, D* \- N- K. Z* b$ GDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
, C1 k5 @7 R1 P5 W# _% r, G1 oDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 b  M: G9 B% ^Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 N# C7 C& F2 s( L- d7 T4 ^Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ [' @, i$ w0 f6 i7 o' O4 R5 T
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
9 P! l! d! a: y3 z9 ]Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ R9 }* e  T8 Z/ C) aDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- P, {8 J+ r. \6 ~
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. z. K2 r5 @5 ]2 f3 R( O5 G4 U
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;" ^# v! ?: E! l  T: l, }( c
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% W  B) y  ~/ c: @
; J3 c9 i! `( R, n% r
/* override diags mask for selected modules */
6 o* e3 q: D: yxdc.useModule('xdc.runtime.Main');
8 p1 _- n* h2 y& U( YDiags.setMaskMeta(
& c5 e/ u9 J: R6 L    "xdc.runtime.Main",
6 I& ^( ^1 n0 a" B5 h    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 Y; C( s+ o2 s0 x, u2 J( _    Diags.RUNTIME_ON1 u5 }  Q# T" t3 l! T
);5 S" f& V4 u6 q& Z! J, Z2 }' O
4 ?* j4 m9 M+ A( q- p. r
var Registry = xdc.useModule('xdc.runtime.Registry');
- X4 r$ }, J+ D4 y5 W+ b4 i, jRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! u! K$ [  q$ d# bRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- O7 y9 R2 E* W" R  gRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
7 V4 f9 c& ^3 h3 k" ^: aRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
% s" e! t; T2 e' F+ p7 w
1 h1 S$ o. m8 M, S' n/* create a logger instance */# E4 [3 e  K1 C$ d* U1 [/ T! t
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 Z( o6 N' ^6 A5 J  `9 H: h
var loggerBufP = new LoggerBuf.Params();
6 b$ ^$ d; _' k! gloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( d/ T# N- c# @' {; R, y3 ~8 w& A+ yloggerBufP.bufType = LoggerBuf.BufType_FIXED;
, N. ^( C. n* t3 A; m* L4 t4 t6 R2 g/ V. E
var appLogger = LoggerBuf.create(loggerBufP);
7 v9 z3 J. W* W* {! cappLogger.instance.name = "AppLog_Core1";
2 Q. J; F/ ?3 `) S- wDefaults.common$.logger = appLogger;; I7 p# ^& T; m! p  J
Memory.defaultHeapSize = 0x8192;    7 n$ _% e, n. N! s
Idle.idleFxns[0] = "&LEDStatus";* U+ j6 L9 U$ X) e3 X' d
Cache.initSize.l2Size = Cache.L2Size_32K;+ f# A) ?" X/ B3 F9 v; k; U3 I( ^9 K3 ]- i
/ ~& t& d; ~4 _. H, J7 ?6 I$ z
回复 支持 反对

使用道具 举报

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 */
7 V' G' c- y: ^, z  o' g" @' Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: ?" Q' O1 U' D, K; E- U/ Ovar heapMemParams = new HeapMem.Params();, d% A. x; z2 q' X
heapMemParams.size = 0x4000;4 m: F! q, g! B

! ?1 R6 }) q: F0 Nvar Memory = xdc.useModule('xdc.runtime.Memory');& u9 y$ |- f" X6 F+ c1 u) t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( E5 E. ?" X3 a6 {* {; y) Z+ k, P1 Q
我大约calloc  每次共计大小为5K*16bits,8 L3 A/ Z5 s0 D  W, {
而默认配置才0x4000、需要改大。0 C: H/ L8 I% s. j

4 {( W; Y6 r: D; ^' N5 `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */9 ~5 `0 h/ C0 Y. q
Program.heap = 0;
& n3 \/ C+ Q# c& H5 C0 p, BProgram.argSize = 100;  /* minimum size */5 N! {! r" h- k. L
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-5 20:51 , Processed in 0.050952 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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